@pvpbet/pvpbet
Version:
A decentralized PVP betting platform based on the Ethereum Virtual Machine (EVM).
1,265 lines • 118 kB
JSON
{
"_format": "hh-sol-artifact-1",
"contractName": "Bet",
"sourceName": "contracts/Bet.sol",
"abi": [
{
"inputs": [],
"name": "AnnouncementPeriodHasAlreadyEnded",
"type": "error"
},
{
"inputs": [],
"name": "AnnouncementPeriodHasNotEndedYet",
"type": "error"
},
{
"inputs": [],
"name": "AnnouncementPeriodHasNotStartedYet",
"type": "error"
},
{
"inputs": [],
"name": "BetHasBeenPenalized",
"type": "error"
},
{
"inputs": [],
"name": "BetHasBeenReleased",
"type": "error"
},
{
"inputs": [],
"name": "BetHasNotEndedYet",
"type": "error"
},
{
"inputs": [],
"name": "CannotReceive",
"type": "error"
},
{
"inputs": [],
"name": "CurrentStatusIsNotArbitrable",
"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": "MathOverflowedMulDiv",
"type": "error"
},
{
"inputs": [],
"name": "NoTargetForPenalty",
"type": "error"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "TransferFailed",
"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": true,
"internalType": "address",
"name": "arbitrator",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "Arbitrated",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "disputer",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "Disputed",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "sender",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "count",
"type": "uint256"
}
],
"name": "Penalized",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "sender",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "count",
"type": "uint256"
}
],
"name": "Released",
"type": "event"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "arbitrate",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "arbitrator",
"type": "address"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "arbitrate",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "arbitratedAmount",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "arbitrator",
"type": "address"
}
],
"name": "arbitratedAmount",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "arbitratedRecordCount",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "offset",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "limit",
"type": "uint256"
}
],
"name": "arbitratedRecords",
"outputs": [
{
"components": [
{
"internalType": "address",
"name": "account",
"type": "address"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"internalType": "struct Record[]",
"name": "",
"type": "tuple[]"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "arbitratedRecords",
"outputs": [
{
"components": [
{
"internalType": "address",
"name": "account",
"type": "address"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"internalType": "struct Record[]",
"name": "",
"type": "tuple[]"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "arbitratedTotalAmount",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "arbitratingPeriodStartTime",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "bet",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "chip",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "chipMinValue",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "collectDisputedChips",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "config",
"outputs": [
{
"components": [
{
"internalType": "uint256",
"name": "chipMinValue",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "voteMinValue",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "minWageredTotalAmount",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "verificationRatio",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "announcementPeriodDuration",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "arbitratingPeriodDuration",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "singleOptionMaxAmountRatio",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "confirmDisputeAmountRatio",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "protocolRewardRatio",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "creatorRewardRatio",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "verifierRewardRatio",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "countPerRelease",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "countPerPenalize",
"type": "uint256"
}
],
"internalType": "struct IBet.BetConfig",
"name": "",
"type": "tuple"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "confirmedWinningOption",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "creator",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "details",
"outputs": [
{
"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": "",
"type": "tuple"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "dispute",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "disputer",
"type": "address"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "dispute",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "disputer",
"type": "address"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "nonce",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "deadline",
"type": "uint256"
},
{
"internalType": "bytes",
"name": "signature",
"type": "bytes"
}
],
"name": "dispute",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "disputer",
"type": "address"
}
],
"name": "disputedAmount",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "disputedAmount",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "disputedChipsReleased",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "disputedRecordCount",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "offset",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "limit",
"type": "uint256"
}
],
"name": "disputedRecords",
"outputs": [
{
"components": [
{
"internalType": "address",
"name": "account",
"type": "address"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"internalType": "struct Record[]",
"name": "",
"type": "tuple[]"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "disputedRecords",
"outputs": [
{
"components": [
{
"internalType": "address",
"name": "account",
"type": "address"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"internalType": "struct Record[]",
"name": "",
"type": "tuple[]"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "disputedTotalAmount",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "string",
"name": "version_",
"type": "string"
},
{
"components": [
{
"internalType": "uint256",
"name": "chipMinValue",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "voteMinValue",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "minWageredTotalAmount",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "verificationRatio",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "announcementPeriodDuration",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "arbitratingPeriodDuration",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "singleOptionMaxAmountRatio",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "confirmDisputeAmountRatio",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "protocolRewardRatio",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "creatorRewardRatio",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "verifierRewardRatio",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "countPerRelease",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "countPerPenalize",
"type": "uint256"
}
],
"internalType": "struct IBet.BetConfig",
"name": "config_",
"type": "tuple"
},
{
"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": "creator_",
"type": "address"
},
{
"internalType": "address",
"name": "chip_",
"type": "address"
},
{
"internalType": "address",
"name": "vote_",
"type": "address"
},
{
"internalType": "address",
"name": "govToken_",
"type": "address"
},
{
"internalType": "address",
"name": "betManager",
"type": "address"
},
{
"internalType": "address",
"name": "betOptionFactory",
"type": "address"
}
],
"name": "initialize",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "isBet",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "pure",
"type": "function"
},
{
"inputs": [],
"name": "minArbitratedTotalAmount",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "minDisputedTotalAmount",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "minVerifiedTotalAmount",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "minWageredTotalAmount",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "name",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "pure",
"type": "function"
},
{
"inputs": [],
"name": "options",
"outputs": [
{
"internalType": "address[]",
"name": "",
"type": "address[]"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "limit",
"type": "uint256"
}
],
"name": "penalize",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "penalize",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "penalized",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "penalizedProgress",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "refundDisputedChips",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "limit",
"type": "uint256"
}
],
"name": "refundDisputedChips",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "limit",
"type": "uint256"
}
],
"name": "release",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "release",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "released",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "releasedProgress",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "status",
"outputs": [
{
"internalType": "enum IBet.Status",
"name": "status_",
"type": "uint8"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "statusDeadline",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "statusUpdate",
"outputs": [
{
"internalType": "enum IBet.Status",
"name": "",
"type": "uint8"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "unconfirmedWinningOption",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "verifiedTotalAmount",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "verifyingPeriodDeadline",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "version",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "vote",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "voteMinValue",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "wageredTotalAmount",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "wageringPeriodDeadline",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"stateMutability": "payable",
"type": "receive"
}
],
"bytecode": "0x608060405234801561001057600080fd5b5061583180620000216000396000f3fe60806040526004361061027f5760003560e01c806302214b62146103be578063024c4128146103e957806302d05d3f1461040857806303fdf3131461042b578063049fe0ed146104405780630576ef611461045557806306fdde031461046a5780631069143a146104a257806311610c25146104c4578063167cba70146104d757806318607ca31461050d578063200d2ed2146105305780632533f03c146105525780632e7502b91461056757806331d8a4cb1461057c578063324527bf1461059157806335e2e1b2146105a6578063362afeab146105c657806337bdc99b146105db57806341898c0d146105fb57806342551d3b1461061057806342c1b507146106305780634fe3db751461064d57806354fd4d501461067a578063565974d31461068f5780635e44c336146106b1578063632a9a52146106d157806379502c55146106e657806379dc9f511461078e5780637a90d026146107a35780638385be62146107b8578063838c48c0146107cd57806386d1a69f146107e257806386d6282c146107f757806390d1ab581461081757806395e7f02d1461082c578063961325211461084c5780639e39aed5146108645780639e654c1214610879578063a3cba3c71461088e578063b2525eab146108a3578063b39da0d6146108b8578063b61500e4146108cd578063bfa54717146108e2578063c7f9218a14610902578063cd4d32e814610922578063cf8efc9d14610937578063d840008c1461094c578063dba412c01461096c578063e5bdad4014610981578063e5d0e47514610996578063e74ca19b146109b6578063f0551642146109cb578063f34b709f146109eb578063f3a9156914610a00578063f9e46b7814610a1857600080fd5b366103b957600061028e610a4e565b905060048160068111156102a4576102a4614b66565b1061034a576102b233610a64565b156102b957005b60068160068111156102cd576102cd614b66565b036102eb5760405163b8ba16bf60e01b815260040160405180910390fd5b60048160068111156102ff576102ff614b66565b148061031c5750600581600681111561031a5761031a614b66565b145b1561034a5734156103405760405163b8ba16bf60e01b815260040160405180910390fd5b610348610ae3565b005b601d546001600160a01b03161561038a57601d54604051631f60ef2760e21b8152610381916001600160a01b031690600401614b89565b60405180910390fd5b610392610b3c565b156103b05760405163b8ba16bf60e01b815260040160405180910390fd5b61034834610b52565b600080fd5b3480156103ca57600080fd5b506103d3610b70565b6040516103e09190614b89565b60405180910390f35b3480156103f557600080fd5b50600a545b6040519081526020016103e0565b34801561041457600080fd5b50601c5461010090046001600160a01b03166103d3565b34801561043757600080fd5b506103fa610b88565b34801561044c57600080fd5b506024546103fa565b34801561046157600080fd5b506002546103fa565b34801561047657600080fd5b5060408051808201909152600681526514159410995d60d21b60208201525b6040516103e09190614be3565b3480156104ae57600080fd5b506104b7610c39565b6040516103e09190614c3a565b3480156104d057600080fd5b50306103d3565b3480156104e357600080fd5b506103fa6104f2366004614c72565b6001600160a01b031660009081526004602052604090205490565b34801561051957600080fd5b50610522610c9b565b6040516103e0929190614c8f565b34801561053c57600080fd5b50610545610a4e565b6040516103e09190614c9d565b34801561055e57600080fd5b506005546103fa565b34801561057357600080fd5b50610545610cba565b34801561058857600080fd5b506103fa610d2c565b34801561059d57600080fd5b506103fa610db7565b3480156105b257600080fd5b5060015b60405190151581526020016103e0565b3480156105d257600080fd5b506103fa610e37565b3480156105e757600080fd5b506103486105f6366004614cc5565b610e53565b34801561060757600080fd5b5061052261114b565b34801561061c57600080fd5b5061034861062b366004614cc5565b61116a565b34801561063c57600080fd5b50602954610100900460ff166105b6565b34801561065957600080fd5b5061066d610668366004614cde565b61120f565b6040516103e09190614d18565b34801561068657600080fd5b50610495611384565b34801561069b57600080fd5b506106a461140d565b6040516103e09190614d65565b3480156106bd57600080fd5b5061066d6106cc366004614cde565b611772565b3480156106dd57600080fd5b506103d36118d9565b3480156106f257600080fd5b506106fb6118e8565b6040516103e09190815181526020808301519082015260408083015190820152606080830151908201526080808301519082015260a0808301519082015260c0808301519082015260e08083015190820152610100808301519082015261012080830151908201526101408083015190820152610160808301519082015261018091820151918101919091526101a00190565b34801561079a57600080fd5b506103486119ce565b3480156107af57600080fd5b506003546103fa565b3480156107c457600080fd5b506000546103fa565b3480156107d957600080fd5b506103fa611ae2565b3480156107ee57600080fd5b50610348610ae3565b34801561080357600080fd5b50610348610812366004614cc5565b610b52565b34801561082357600080fd5b506103fa611b85565b34801561083857600080fd5b50610348610847366004614e3d565b611b9e565b34801561085857600080fd5b5060295460ff166105b6565b34801561087057600080fd5b50610348611bbd565b34801561088557600080fd5b5061066d611be9565b34801561089a57600080fd5b506103d3611bf9565b3480156108af57600080fd5b50600b546103fa565b3480156108c457600080fd5b506026546103fa565b3480156108d957600080fd5b506103d3611c11565b3480156108ee57600080fd5b506103486108fd366004614e3d565b611c20565b34801561090e57600080fd5b5061034861091d366004614cc5565b611cfb565b34801561092e57600080fd5b50610348611f1e565b34801561094357600080fd5b506025546103fa565b34801561095857600080fd5b50610348610967366004614eaa565b611f2a565b34801561097857600080fd5b506103fa611f52565b34801561098d57600080fd5b506103fa611f5d565b3480156109a257600080fd5b506103486109b1366004614cc5565b611f67565b3480156109c257600080fd5b506009546103fa565b3480156109d757600080fd5b506103486109e6366004614f47565b61215d565b3480156109f757600080fd5b5061066d612325565b348015610a0c57600080fd5b5060075460ff166105b6565b348015610a2457600080fd5b506103fa610a33366004614c72565b6001600160a01b031660009081526001602052604090205490565b6000610a58612337565b50949695505050505050565b60006001600160a01b0382163b15610adb57816001600160a01b0316638e36d24a6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610ad0575060408051601f3d908101601f19168201909252610acd91810190615046565b60015b15610adb5792915050565b506000919050565b60295460ff168015610af757506000602654115b8015610b0d57506023546001600160a01b031615155b8015610b215750602954610100900460ff16155b15610b3057610b2e611f1e565b565b601454610b2e90610e53565b6000333b151580610b4d5750333214155b905090565b610b5b81612516565b610b63612545565b15610b6d57426026555b50565b600080610b7b612337565b5093979650505050505050565b601b546000908190815b81811015610c3157610c27601b8281548110610bb057610bb0615068565b600091825260209182902001546040805163833e194360e01b815290516001600160a01b039092169263833e1943926004808401938290030181865afa158015610bfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c22919061507e565b840190565b9250600101610b92565b509092915050565b6060601b805480602002602001604051908101604052809291908181526020018280548015610c9157602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610c73575b5050505050905090565b6000806000610ca8612337565b50602754999098509650505050505050565b600080600080610cc8612337565b5050505092509250925082601c60006101000a81548160ff02191690836006811115610cf657610cf6614b66565b0217905550602280546001600160a01b039384166001600160a01b03199182161790915560238054929093169116179055919050565b600080610d3860025490565b601b5490915060005b81811015610c3157610dad601b8281548110610d5f57610d5f615068565b6000918252602091829020015460408051630576ef6160e01b815290516001600160a01b0390921692630576ef61926004808401938290030181865afa158015610bfe573d6000803e3d6000fd5b9250600101610d41565b601b546000908190815b81811015610c3157610e2d601b8281548110610ddf57610ddf615068565b60009182526020918290200154604080516321a29bb360e21b815290516001600160a01b039092169263868a6ecc926004808401938290030181865afa158015610bfe573d6000803e3d6000fd5b9250600101610dc1565b6000610b4d6009600701546064610e4c610db7565b9190612559565b60295460ff1615610e775760405163354348b160e11b815260040160405180910390fd5b600080600080600080610e88612337565b5095509550955095509550955060008380610ea05750825b90506004876006811115610eb657610eb6614b66565b1015610ed557604051630ce9739960e31b815260040160405180910390fd5b602280546001600160a01b038089166001600160a01b03199283161790925560238054928816929091169190911790556027546000610f1e84610f18848d61261e565b90612636565b60278190559050337fb21fb52d5749b80f3182f8c6992236b5e5576681880914484d7f4c9b062e619e610f518484615097565b60405190815260200160405180910390a2838103610fbd576029805460ff19166001179055821580610f8a5750602954610100900460ff165b610f945788610f97565b60065b601c805460ff19166001836006811115610fb357610fb3614b66565b0217905550610fe2565b601c80548a919060ff19166001836006811115610fdc57610fdc614b66565b02179055505b60008661100a57610ff481848461264c565b905080821161100a575050505050505050505050565b60048a600681111561101e5761101e614b66565b036110445761102e8184846126de565b9050808211611044575050505050505050505050565b601b5460005b8181101561110e576000601b828154811061106757611067615068565b6000918252602090912001546001600160a01b0316905088158061109d57508b6001600160a01b0316816001600160a01b031614155b156110c7576110ae8185888861282b565b93508385116110c7575050505050505050505050505050565b60048d60068111156110db576110db614b66565b14611105576110ec81858888612929565b9350838511611105575050505050505050505050505050565b5060010161104a565b5060295460ff16801561113057508415806111305750602954610100900460ff165b1561113d5761113d6129ea565b505050505050505050505050565b6000806000611158612337565b6028549a909950975050505050505050565b336111758183612a0b565b505061117f6118d9565b6001600160a01b031663b41c7d8d826040518263ffffffff1660e01b81526004016111aa9190614b89565b602060405180830381865afa1580156111c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111eb919061507e565b82111561120b5760405163162908e360e11b815260040160405180910390fd5b5050565b606060006112828484600080548060200260200160405190810160405280929190818152602001828054801561126e57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611250575b5050505050612c3a9092919063ffffffff16565b80519091506000816001600160401b038111156112a1576112a16150b8565b6040519080825280602002602001820160405280156112da57816020015b6112c7614b4f565b8152602001906001900390816112bf5790505b50905060005b828110156113785760008482815181106112fc576112fc615068565b602002602001015190506040518060400160405280826001600160a01b0316815260200160016000846001600160a01b03166001600160a01b031681526020019081526020016000205481525083838151811061135b5761135b615068565b6020026020010181905250506113718160010190565b90506112e0565b50925050505b92915050565b606060088054611393906150ce565b80601f01602080910402602001604051908101604052809291908181526020018280546113bf906150ce565b8015610c915780601f106113e157610100808354040283529160200191610c91565b820191906000526020600020905b8154815290600101906020018083116113ef57509395945050505050565b61143f6040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b60166040518060a001604052908160008201805461145c906150ce565b80601f0160208091040260200160405190810160405280929190818152602001828054611488906150ce565b80156114d55780601f106114aa576101008083540402835291602001916114d5565b820191906000526020600020905b8154815290600101906020018083116114b857829003601f168201915b505050505081526020016001820180546114ee906150ce565b80601f016020809104026020016040519081016040528092919081815260200182805461151a906150ce565b80156115675780601f1061153c57610100808354040283529160200191611567565b820191906000526020600020905b81548152906001019060200180831161154a57829003601f168201915b50505050508152602001600282018054611580906150ce565b80601f01602080910402602001604051908101604052809291908181526020018280546115ac906150ce565b80156115f95780601f106115ce576101008083540402835291602001916115f9565b820191906000526020600020905b8154815290600101906020018083116115dc57829003601f168201915b50505050508152602001600382018054611612906150ce565b80601f016020809104026020016040519081016040528092919081815260200182805461163e906150ce565b801561168b5780601f106116605761010080835404028352916020019161168b565b820191906000526020600020905b81548152906001019060200180831161166e57829003601f168201915b5050505050815260200160048201805480602002602001604051908101604052809291908181526020016000905b828210156117655783829060005260206000200180546116d8906150ce565b80601f0160208091040260200160405190810160405280929190818152602001828054611704906150ce565b80156117515780601f1061172657610100808354040283529160200191611751565b820191906000526020600020905b81548152906001019060200180831161173457829003601f168201915b5050505050815260200190600101906116b9565b5050505081525050905090565b606060006117e38484600380548060200260200160405190810160405280929190818152602001828054801561126e576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611250575050505050612c3a9092919063ffffffff16565b80519091506000816001600160401b03811115611802576118026150b8565b60405190808252806020026020018201604052801561183b57816020015b611828614b4f565b8152602001906001900390816118205790505b50905060005b8281101561137857600084828151811061185d5761185d615068565b602002602001015190506040518060400160405280826001600160a01b0316815260200160046000846001600160a01b03166001600160a01b03168152602001908152602001600020548152508383815181106118bc576118bc615068565b6020026020010181905250506118d28160010190565b9050611841565b601e546001600160a01b031690565b611953604051806101a00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b50604080516101a0810182526009548152600a546020820152600b5491810191909152600c546060820152600d546080820152600e5460a0820152600f5460c082015260105460e082015260115461010082015260125461012082015260135461014082015260145461016082015260155461018082015290565b3330146119f05733604051633733be5960e21b81526004016103819190614b89565b60075460ff1680611a09575060075462010000900460ff165b610b2e5760003090506003816001600160a01b031663200d2ed26040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a769190615102565b6006811115611a8757611a87614b66565b11611aa55760405163164f2ed360e11b815260040160405180910390fd5b6007805461ffff1916610101179055306001600160a01b03821614610b6d5761120b611acf611c11565b6001600160a01b03831690600019612d34565b600080611aed610a4e565b90506000816006811115611b0357611b03614b66565b03611b1057505060245490565b6001816006811115611b2457611b24614b66565b03611b3157505060255490565b6002816006811115611b4557611b45614b66565b03611b5857600d54602554015b91505090565b6003816006811115611b6c57611b6c614b66565b03611b7d57600e5460265401611b52565b600091505090565b6000610b4d600960030154611b98610db7565b90612d43565b611ba88282612d5b565b611bb0612545565b1561120b57426026555050565b333014611bdf5733604051633733be5960e21b81526004016103819190614b89565b610b2e6000611f67565b60008054606091610b4d9161120f565b600080611c04612337565b5092979650505050505050565b601d546001600160a01b031690565b611c286118d9565b6001600160a01b0316336001600160a01b031614611c5b5733604051633733be5960e21b81526004016103819190614b89565b611c658282612a0b565b5050611c6f6118d9565b6001600160a01b031663b41c7d8d836040518263ffffffff1660e01b8152600401611c9a9190614b89565b602060405180830381865afa158015611cb7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cdb919061507e565b81111561120b5760405163162908e360e11b815260040160405180910390fd5b602954610100900460ff1615611d245760405163ec4647a760e01b815260040160405180910390fd5b600080600080600080611d35612337565b9650509550955095509550955082158015611d4e575081155b15611d6c5760405163f316ae5f60e01b815260040160405180910390fd5b6004866006811115611d8057611d80614b66565b1015611d9f57604051630ce9739960e31b815260040160405180910390fd5b602280546001600160a01b038088166001600160a01b03199283161790925560238054928716929091169190911790556028546000611de283610f18848c61261e565b60288190559050337fce6324a0bfd5e264b9b4039aeeab1620f460c269fa080cbd889681a37aaadc65611e158484615097565b60405190815260200160405180910390a2828103611e74576029805461ff001981166101001790915560ff16611e4b5787611e4e565b60065b601c805460ff19166001836006811115611e6a57611e6a614b66565b0217905550611e99565b601c805489919060ff19166001836006811115611e9357611e93614b66565b02179055505b60008515611ec657611eac818484612de6565b9050808211611ec15750505050505050505050565b611eec565b8415611eec57611ed7818484612fe2565b9050808211611eec5750505050505050505050565b602954610100900460ff168015611f05575060295460ff165b15611f1257611f126129ea565b50505050505050505050565b601554610b2e90611cfb565b611f38868686868686613166565b611f40612545565b15611f4a57426026555b505050505050565b6000610b4d60055490565b6000610b4d610b88565b333014611f895733604051633733be5960e21b81526004016103819190614b89565b60075460ff16610b6d576003306001600160a01b031663200d2ed26040518163ffffffff1660e01b8152600401602060405180830381865afa158015611fd3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ff79190615102565b600681111561200857612008614b66565b116120265760405163164f2ed360e11b815260040160405180910390fd5b6007805462ff00001916620100001790556000612041611c11565b905060008061204f846131ff565b91509150612065836001600160a01b0316613281565b156120f55760008061207784846132ea565b604051633b3e672f60e01b815291935091506001600160a01b03861690633b3e672f906120aa9085908590600401615123565b6020604051808303816000875af11580156120c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120ed9190615046565b505050612157565b815b818110156121555760006003828154811061211457612114615068565b60009182526020808320909101546001600160a01b0316808352600490915260409091205490915061214b90829087906001613445565b50506001016120f7565b505b50505050565b60295462010000900460ff16156121875760405163f92ee8a960e01b815260040160405180910390fd5b6029805462ff000019166201000017905560086121a58c8e836151d5565b50893560095560208a0135600a5560408a0135600b5560608a0135600c5560808a0135600d5560a08a0135600e5560c08a0135600f5560e08a01356010556101008a01356011556101208a01356012556101408a01356013556101608a01356014556101808a013560155588601661221d82826153f9565b505042880160248190558701602555601c80546001600160a01b0380891661010002610100600160a81b031990921691909117909155601d80548783166001600160a01b031991821617909155601e80548784169083168117909155601f80549387169390921692909217905560408051632c97bfe560e11b8152905163592f7fca916004808201926020929091908290030181865afa1580156122c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122e9919061552c565b602080546001600160a01b03199081166001600160a01b03938416179091556021805490911691841691909117905561113d818b8b888861360b565b6060610b4d6000600380549050611772565b601c5460225460235460ff909216916001600160a01b03918216911660008080808087600681111561236b5761236b614b66565b148015612379575060245442115b156123b15761238661370c565b1561239457600196506123b1565b61239c610db7565b6000036123ac57600696506123b1565b600596505b60018760068111156123c5576123c5614b66565b1480156123d3575060255442115b156123ff576123e061380a565b95506001600160a01b038616156123fa57600296506123ff565b600596505b600287600681111561241357612413614b66565b0361243f5760265415612429576003965061243f565b600d546025540142111561243f57859450600496505b600387600681111561245357612453614b66565b1480156124655750600e546026540142115b1561249157612472613913565b94506001600160a01b0385161561248c5760049650612491565b600596505b60006026541180156124ab57506001600160a01b03851615155b156124d757856001600160a01b0316856001600160a01b0316036124d257600193506124d7565b600192505b60048760068111156124eb576124eb614b66565b1061250d576124fc86868686613a1c565b915061250a86868686613c65565b90505b90919293949596565b336000806125248385613da6565b91509150612157612533611c11565b6001600160a01b038516908484613fc7565b600061254f610e37565b6005541015905090565b60008383028160001985870982811083820303915050806000036125905783828161258657612586615549565b0492505050612617565b8084116125b05760405163227bc15360e01b815260040160405180910390fd5b6000848688096000868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150505b9392505050565b6000828201838110156126175760001991505061137e565b60008183106126455781612617565b5090919050565b60008061265860035490565b9050848101858411801561266b57508085105b156126d557600061267e87838888614005565b60405163e5d0e47560e01b81526004810182905290925030915063e5d0e47590602401600060405180830381600087803b1580156126bb57600080fd5b505af11580156126cf573d6000803e3d6000fd5b50505050505b95945050505050565b60008084831180156126f05750848411155b612701576126fc610db7565b612709565b612709614037565b60115490915060009061271f9083906064612559565b6012549091506000906127359084906064612559565b60135490915060009061274b9085906064612559565b905060006127618261275d8587890382565b0390565b905088871180156127725750888811155b1561279d57601d54601c5461279b916001600160a01b0361010090920482169116856001613445565b505b60006127ab838b8b8b614112565b9050808a036127b957938201935b8099508988116127d0579550612617945050505050565b6127dc828b8b8b614267565b9050808a036127ea57938101935b809950898811612801579550612617945050505050565b89881180156128105750898911155b1561281e5761281e856143ae565b9998505050505050505050565b6000808590506000816001600160a01b031663648ca5b56040518163ffffffff1660e01b8152600401602060405180830381865afa158015612871573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612895919061507e565b905085810186851180156128a857508086105b1561291c5760006128bb88838989614005565b604051634451d16b60e11b8152600481018290529092506001600160a01b03861691506388a3a2d6906024015b600060405180830381600087803b15801561290257600080fd5b505af1158015612916573d6000803e3d6000fd5b50505050505b925050505b949350505050565b6000808590506000816001600160a01b031663a06ec6e56040518163ffffffff1660e01b8152600401602060405180830381865afa15801561296f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612993919061507e565b905085810186851180156129a657508086105b1561291c5760006129b988838989614005565b604051631a4e8e2b60e11b8152600481018290529092506001600160a01b038616915063349d1c56906024016128e8565b601d54602154610b6d916001600160a01b0391821691166000196001613445565b600080600083118015612a1f5750600a5483105b15612a3d5760405163162908e360e11b815260040160405180910390fd5b6000306001600160a01b0316632e7502b96040518163ffffffff1660e01b81526004016020604051808303816000875af1158015612a7f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612aa39190615102565b90506003816006811115612ab957612ab9614b66565b1015612ad857604051632ff85a2f60e11b815260040160405180910390fd5b6003816006811115612aec57612aec614b66565b1115612b0b57604051632ff85a2f60e11b815260040160405180910390fd5b6001600160a01b038516600090815260016020526040902080549085905584935091508215801590612b3b575081155b15612b8d57600080546001810182559080527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5630180546001600160a01b0319166001600160a01b038716179055612bab565b82158015612b9b5750600082115b15612bab57612bab600086614500565b81831115612bcf57612bc7612bc08385615097565b6002540190565b60025