UNPKG

@vechain/vebetterdao-contracts

Version:

Open-source repository that houses the smart contracts powering the decentralized VeBetterDAO on the VeChain Thor blockchain.

1,646 lines 95.2 kB
{ "_format": "hh-sol-artifact-1", "contractName": "RelayerRewardsPoolV2", "sourceName": "contracts/deprecated/V2/RelayerRewardsPoolV2.sol", "abi": [ { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "AccessControlBadConfirmation", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "bytes32", "name": "neededRole", "type": "bytes32" } ], "name": "AccessControlUnauthorizedAccount", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "target", "type": "address" } ], "name": "AddressEmptyCode", "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": "InvalidInitialization", "type": "error" }, { "inputs": [ { "internalType": "string", "name": "parameter", "type": "string" } ], "name": "InvalidParameter", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "relayer", "type": "address" }, { "internalType": "uint256", "name": "roundId", "type": "uint256" } ], "name": "NoRewardsToClaim", "type": "error" }, { "inputs": [], "name": "NotInitializing", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "caller", "type": "address" }, { "internalType": "address", "name": "preferredRelayer", "type": "address" } ], "name": "NotPreferredRelayer", "type": "error" }, { "inputs": [], "name": "ReentrancyGuardReentrantCall", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "relayer", "type": "address" } ], "name": "RelayerAlreadyRegistered", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "relayer", "type": "address" } ], "name": "RelayerNotRegistered", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "relayer", "type": "address" }, { "internalType": "uint256", "name": "roundId", "type": "uint256" } ], "name": "RewardsAlreadyClaimed", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "roundId", "type": "uint256" } ], "name": "RoundNotEnded", "type": "error" }, { "inputs": [], "name": "TransferFailed", "type": "error" }, { "inputs": [], "name": "UUPSUnauthorizedCallContext", "type": "error" }, { "inputs": [ { "internalType": "bytes32", "name": "slot", "type": "bytes32" } ], "name": "UUPSUnsupportedProxiableUUID", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "caller", "type": "address" }, { "internalType": "address", "name": "relayer", "type": "address" } ], "name": "UnauthorizedUnregister", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "newAddress", "type": "address" }, { "indexed": true, "internalType": "address", "name": "oldAddress", "type": "address" } ], "name": "B3TRAddressUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "newWeight", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "oldWeight", "type": "uint256" } ], "name": "ClaimWeightUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "newBlocks", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "oldBlocks", "type": "uint256" } ], "name": "EarlyAccessBlocksUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "newAddress", "type": "address" }, { "indexed": true, "internalType": "address", "name": "oldAddress", "type": "address" } ], "name": "EmissionsAddressUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "roundId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "userCount", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "newTotalActions", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "newTotalWeightedActions", "type": "uint256" } ], "name": "ExpectedActionsReduced", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "newFee", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "oldFee", "type": "uint256" } ], "name": "FeeCapUpdated", "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": "user", "type": "address" }, { "indexed": true, "internalType": "address", "name": "relayer", "type": "address" } ], "name": "PreferredRelayerSet", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "relayer", "type": "address" }, { "indexed": true, "internalType": "address", "name": "voter", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "roundId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "actionCount", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "weight", "type": "uint256" } ], "name": "RelayerActionRegistered", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "newDenominator", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "oldDenominator", "type": "uint256" } ], "name": "RelayerFeeDenominatorUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "newFee", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "oldFee", "type": "uint256" } ], "name": "RelayerFeePercentageUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "relayer", "type": "address" } ], "name": "RelayerRegistered", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "relayer", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "roundId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "RelayerRewardsClaimed", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "relayer", "type": "address" } ], "name": "RelayerUnregistered", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "roundId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "totalRewards", "type": "uint256" } ], "name": "RewardsDeposited", "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": "uint256", "name": "roundId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "totalAutoVoteUsers", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "totalActions", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "totalWeightedActions", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "numRelayers", "type": "uint256" } ], "name": "TotalAutoVotingActionsSet", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "implementation", "type": "address" } ], "name": "Upgraded", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "newWeight", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "oldWeight", "type": "uint256" } ], "name": "VoteWeightUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "newAddress", "type": "address" }, { "indexed": true, "internalType": "address", "name": "oldAddress", "type": "address" } ], "name": "XAllocationVotingAddressUpdated", "type": "event" }, { "inputs": [], "name": "DEFAULT_ADMIN_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "POOL_ADMIN_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "UPGRADER_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "UPGRADE_INTERFACE_VERSION", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "totalReward", "type": "uint256" } ], "name": "calculateRelayerFee", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "roundId", "type": "uint256" }, { "internalType": "address", "name": "relayer", "type": "address" } ], "name": "claimRewards", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "relayer", "type": "address" }, { "internalType": "uint256", "name": "roundId", "type": "uint256" } ], "name": "claimableRewards", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "roundId", "type": "uint256" } ], "name": "completedWeightedActions", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "uint256", "name": "roundId", "type": "uint256" } ], "name": "deposit", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "getB3trAddress", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getClaimWeight", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getEarlyAccessBlocks", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getEmissionsAddress", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getFeeCap", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "roundId", "type": "uint256" } ], "name": "getMissedAutoVotingUsersCount", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" } ], "name": "getPreferredRelayer", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getRegisteredRelayers", "outputs": [ { "internalType": "address[]", "name": "", "type": "address[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getRelayerFeeDenominator", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getRelayerFeePercentage", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "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": "uint256", "name": "roundId", "type": "uint256" } ], "name": "getTotalRewards", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getVoteWeight", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getXAllocationVotingAddress", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "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": "admin", "type": "address" }, { "internalType": "address", "name": "upgrader", "type": "address" }, { "internalType": "address", "name": "b3trAddress", "type": "address" }, { "internalType": "address", "name": "emissionsAddress", "type": "address" }, { "internalType": "address", "name": "xAllocationVotingAddress", "type": "address" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "initializeV2", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "roundId", "type": "uint256" } ], "name": "isClaimEarlyAccessActive", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "relayer", "type": "address" } ], "name": "isRegisteredRelayer", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "roundId", "type": "uint256" } ], "name": "isRewardClaimable", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "roundId", "type": "uint256" } ], "name": "isVoteEarlyAccessActive", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "proxiableUUID", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "roundId", "type": "uint256" }, { "internalType": "uint256", "name": "userCount", "type": "uint256" } ], "name": "reduceExpectedActionsForRound", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "relayer", "type": "address" } ], "name": "registerRelayer", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "relayer", "type": "address" }, { "internalType": "address", "name": "voter", "type": "address" }, { "internalType": "uint256", "name": "roundId", "type": "uint256" }, { "internalType": "enum RelayerAction", "name": "action", "type": "uint8" } ], "name": "registerRelayerAction", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "callerConfirmation", "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": "b3trAddress", "type": "address" } ], "name": "setB3TRAddress", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "newWeight", "type": "uint256" } ], "name": "setClaimWeight", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "blocks", "type": "uint256" } ], "name": "setEarlyAccessBlocks", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "emissionsAddress", "type": "address" } ], "name": "setEmissionsAddress", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "newFeeCap", "type": "uint256" } ], "name": "setFeeCap", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "relayer", "type": "address" } ], "name": "setPreferredRelayer", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "newDenominator", "type": "uint256" } ], "name": "setRelayerFeeDenominator", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "newFeePercentage", "type": "uint256" } ], "name": "setRelayerFeePercentage", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "roundId", "type": "uint256" }, { "internalType": "uint256", "name": "totalAutoVotingUsers", "type": "uint256" } ], "name": "setTotalActionsForRound", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "newWeight", "type": "uint256" } ], "name": "setVoteWeight", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "xAllocationVotingAddress", "type": "address" } ], "name": "setXAllocationVotingAddress", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes4", "name": "interfaceId", "type": "bytes4" } ], "name": "supportsInterface", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "roundId", "type": "uint256" } ], "name": "totalActions", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "relayer", "type": "address" }, { "internalType": "uint256", "name": "roundId", "type": "uint256" } ], "name": "totalRelayerActions", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "relayer", "type": "address" }, { "internalType": "uint256", "name": "roundId", "type": "uint256" } ], "name": "totalRelayerWeightedActions", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "roundId", "type": "uint256" } ], "name": "totalWeightedActions", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "relayer", "type": "address" } ], "name": "unregisterRelayer", "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": [ { "internalType": "uint256", "name": "roundId", "type": "uint256" }, { "internalType": "address", "name": "voter", "type": "address" }, { "internalType": "address", "name": "caller", "type": "address" } ], "name": "validateClaimDuringEarlyAccess", "outputs": [], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "roundId", "type": "uint256" }, { "internalType": "address", "name": "voter", "type": "address" }, { "internalType": "address", "name": "caller", "type": "address" } ], "name": "validateVoteDuringEarlyAccess", "outputs": [], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "version", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "pure", "type": "function" } ], "bytecode": "0x60a0604052306080523480156200001557600080fd5b506200002062000026565b620000da565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff1615620000775760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b0390811614620000d75780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051613a746200010460003960008181612ed501528181612efe01526130460152613a746000f3fe6080604052600436106102915760003560e01c806301ffc9a7146102965780631459457a146102cb57806314d92307146102ed578063189ca3161461030d5780631bc3a6731461032d578063241f9e2b1461034f578063248a9ca31461037d57806324a697a31461039d57806325d3155e146103bd5780632f2ff15d146103d2578063338111e7146103f257806336568abe1461041257806336a7c134146104325780633bb18a76146104475780633d009cee1461046757806347b0b33e1461048757806348c2bd78146104a75780634f1ef286146104c75780634f6981ee146104da57806352d1902d146104fa57806354fd4d501461050f578063552164ee1461054257806356f1612f1461056257806357181609146105825780635ae1cd14146105a25780635cd8a76b146105c25780635f72790a146105d757806362f29478146105f7578063650e8a761461060c578063675d0f8d1461062c5780636bb07c731461064c5780636c7b69cb1461066c5780636cf88e731461068c5780637f5e98bd146106ac57806385530201146106c157806389a96d35146106e15780638d2340a01461070157806391d14854146107165780639858b78a14610736578063a217fddf14610756578063ac4aa16b1461076b578063ad3cb1cc1461078d578063af54c53a146107be578063b7fe075a146107de578063b8f6dba7146107f3578063be9412df14610815578063d428cffc1461082a578063d547741f1461083f578063d56843921461085f578063d94290e51461087f578063dc404a0e1461089f578063df171b0c146108bf578063e2bbb158146108df578063e5ed920b146108ff578063e78168b51461091f578063e7dfe6721461093f578063f5e57b391461095f578063f72c0d8b1461097f575b600080fd5b3480156102a257600080fd5b506102b66102b13660046133cf565b6109a1565b60405190151581526020015b60405180910390f35b3480156102d757600080fd5b506102eb6102e6366004613415565b6109d8565b005b3480156102f957600080fd5b506102eb61030836600461347a565b610dd5565b34801561031957600080fd5b506102eb610328366004613495565b610fee565b34801561033957600080fd5b506103426110ca565b6040516102c291906134ae565b34801561035b57600080fd5b5061036f61036a3660046134c2565b6110e8565b6040519081526020016102c2565b34801561038957600080fd5b5061036f610398366004613495565b61111d565b3480156103a957600080fd5b506102eb6103b8366004613495565b61113d565b3480156103c957600080fd5b506103426111cd565b3480156103de57600080fd5b506102eb6103ed3660046134ec565b6111eb565b3480156103fe57600080fd5b5061036f61040d3660046134c2565b61120d565b34801561041e57600080fd5b506102eb61042d3660046134ec565b611339565b34801561043e57600080fd5b5061036f611371565b34801561045357600080fd5b506102eb61046236600461347a565b611386565b34801561047357600080fd5b506102b6610482366004613495565b611480565b34801561049357600080fd5b506102eb6104a236600461347a565b61153a565b3480156104b357600080fd5b506102b66104c2366004613495565b611623565b6102eb6104d536600461352e565b6116c0565b3480156104e657600080fd5b5061036f6104f5366004613495565b6116df565b34801561050657600080fd5b5061036f61175d565b34801561051b57600080fd5b506040805180820190915260018152601960f91b60208201525b6040516102c29190613613565b34801561054e57600080fd5b5061036f61055d366004613495565b61177a565b34801561056e57600080fd5b506102eb61057d36600461347a565b61179a565b34801561058e57600080fd5b506102eb61059d36600461347a565b611883565b3480156105ae57600080fd5b506102eb6105bd366004613646565b611975565b3480156105ce57600080fd5b506102eb611ad6565b3480156105e357600080fd5b506102eb6105f2366004613682565b611b77565b34801561060357600080fd5b5061036f611c7d565b34801561061857600080fd5b5061034261062736600461347a565b611c92565b34801561063857600080fd5b506102eb610647366004613495565b611cc3565b34801561065857600080fd5b506102eb610667366004613495565b611db5565b34801561067857600080fd5b506102eb6106873660046134ec565b611e8f565b34801561069857600080fd5b506102eb6106a73660046136a4565b612111565b3480156106b857600080fd5b5061036f6122dd565b3480156106cd57600080fd5b5061036f6106dc366004613495565b6122f2565b3480156106ed57600080fd5b506102eb6106fc366004613495565b612312565b34801561070d57600080fd5b50610342612406565b34801561072257600080fd5b506102b66107313660046134ec565b612421565b34801561074257600080fd5b5061036f6107513660046134c2565b612457565b34801561076257600080fd5b5061036f600081565b34801561077757600080fd5b5061078061248c565b6040516102c291906136f7565b34801561079957600080fd5b50610535604051806040016040528060058152602001640352e302e360dc1b81525081565b3480156107ca57600080fd5b506102eb6107d936600461347a565b6124f8565b3480156107ea57600080fd5b5061036f6125b1565b3480156107ff57600080fd5b5061036f60008051602061393f83398151915281565b34801561082157600080fd5b5061036f6125c6565b34801561083657600080fd5b5061036f6125db565b34801561084b57600080fd5b506102eb61085a3660046134ec565b6125f0565b34801561086b57600080fd5b506102b661087a36600461347a565b61260c565b34801561088b57600080fd5b506102eb61089a366004613495565b61263c565b3480156108ab57600080fd5b5061036f6108ba366004613495565b61270b565b3480156108cb57600080fd5b5061036f6108da366004613495565b612755565b3480156108eb57600080fd5b506102eb6108fa366004613682565b612775565b34801561090b57600080fd5b506102eb61091a366004613646565b612900565b34801561092b57600080fd5b5061036f61093a366004613495565b612a50565b34801561094b57600080fd5b506102eb61095a366004613682565b612a70565b34801561096b57600080fd5b506102b661097a366004613495565b612cda565b34801561098b57600080fd5b5061036f60008051602061397f83398151915281565b60006001600160e01b03198216637965db0b60e01b14806109d257506301ffc9a760e01b6001600160e01b03198316145b92915050565b60006109e2612d1e565b805490915060ff600160401b82041615906001600160401b0316600081158015610a095750825b90506000826001600160401b03166001148015610a255750303b155b905081158015610a33575080155b15610a515760405163f92ee8a960e01b815260040160405180910390fd5b84546001600160401b03191660011785558315610a7a57845460ff60401b1916600160401b1785555b6001600160a01b038a16610aee5760405162461bcd60e51b815260206004820152603060248201527f52656c6179657252657761726473506f6f6c3a2061646d696e2063616e6e6f7460448201526f206265207a65726f206164647265737360801b60648201526084015b60405180910390fd5b6001600160a01b038916610b605760405162461bcd60e51b815260206004820152603360248201527f52656c6179657252657761726473506f6f6c3a2075706772616465722063616e6044820152726e6f74206265207a65726f206164647265737360681b6064820152608401610ae5565b6001600160a01b038816610bce5760405162461bcd60e51b815260206004820152602f60248201527f52656c6179657252657761726473506f6f6c3a20623374722063616e6e6f742060448201526e6265207a65726f206164647265737360881b6064820152608401610ae5565b6001600160a01b038716610c415760405162461bcd60e51b815260206004820152603460248201527f52656c6179657252657761726473506f6f6c3a20656d697373696f6e732063616044820152736e6e6f74206265207a65726f206164647265737360601b6064820152608401610ae5565b6001600160a01b038616610cbc5760405162461bcd60e51b815260206004820152603c60248201527f52656c6179657252657761726473506f6f6c3a2078416c6c6f636174696f6e5660448201527b6f74696e672063616e6e6f74206265207a65726f206164647265737360201b6064820152608401610ae5565b610cc4612d42565b610ccc612d4c565b610cd4612d42565b610cdf60008b612d5c565b50610cf860008051602061397f8339815191528a612d5c565b50610d1160008051602061393f8339815191528b612d5c565b506000610d1c612dfd565b80546001600160a01b03808c166001600160a01b0319928316178355600180840180548d8416908516179055600284018054928c1692909316919091179091556003600b830155600c820155600a60108201556064601182015568056bc75e2d63100000601282015562069780600f90910155508315610dc957845460ff60401b1916855560405160008051602061395f83398151915290610dc090600190613744565b60405180910390a15b50505050505050505050565b6001600160a01b0381163314801590610e035750610e0160008051602061393f83398151915233612421565b155b8015610e175750610e15600033612421565b155b15610e39573381604051630147b5b160e31b8152600401610ae5929190613758565b6000610e43612dfd565b6001600160a01b0383166000908152600d8201602052604090205490915060ff16610e83578160405163138cb58960e31b8152600401610ae591906134ae565b6001600160a01b0382166000908152600d820160205260408120805460ff191690555b600e820154811015610fb557826001600160a01b031682600e018281548110610ed157610ed1613772565b6000918252602090912001546001600160a01b031603610fa357600e82018054610efd9060019061379e565b81548110610f0d57610f0d613772565b600091825260209091200154600e830180546001600160a01b039092169183908110610f3b57610f3b613772565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555081600e01805480610f7c57610f7c6137b1565b600082815260209020810160001990810180546001600160a01b0319169055019055610fb5565b80610fad816137c7565b915050610ea6565b506040516001600160a01b038316907f490a66cc56c789979052c7052fc0c10a6c4627d8e6165caec80db97a4c38352190600090a25050565b60008051602061393f8339815191526110078133612421565b806110185750611018600033612421565b6110345760405162461bcd60e51b8152600401610ae5906137e0565b81600003611072576040516305519d6f60e51b815260206004820152600a6024820152691d9bdd1955d95a59da1d60b21b6044820152606401610ae5565b600061107c612dfd565b600b8101805490859055604051919250907fc6d810f6c3aa465110416db0d540c72fcfe818503d1580fd90df38a482f81af8906110bc908690849061383d565b60405180910390a150505050565b6000806110d5612dfd565b600201546001600160a01b031692915050565b6000806110f3612dfd565b6000938452600401602090815260408085206001600160a01b039690961685529490525050205490565b600080611128612e21565b60009384526020525050604090206001015490565b60008051602061393f8339815191526111568133612421565b806111675750611167600033612421565b6111835760405162461bcd60e51b8152600401610ae5906137e0565b600061118d612dfd565b600f8101805490859055604051919250907f9f49ab705704ba5579e12282116057bb42856ad21fc913b1786bf1effc722b8d906110bc908690849061383d565b6000806111d8612dfd565b600101546001600160a01b031692915050565b6111f48261111d565b6111fd81612e45565b6112078383612d5c565b50505050565b600080611218612dfd565b604051631e804e7760e11b8152600481018590529091503090633d009cee90602401602060405180830381865afa158015611257573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061127b919061384b565b6112895760009150506109d2565b600083815260088201602090815260408083206001600160a01b038816845290915290205460ff16156112c05760009150506109d2565b600083815260058201602090815260408083206001600160a01b03881684528252808320548684526007850183528184205460038601909352922054821580611307575081155b156113195760009450505050506109d2565b81611324848361386d565b61132e9190613884565b979650505050505050565b6001600160a01b03811633146113625760405163334bd91960e11b815260040160405180910390fd5b61136c8282612e52565b505050565b60008061137c612dfd565b6012015492915050565b60008051602061393f83398151915261139f8133612421565b806113b057506113b0600033612421565b6113cc5760405162461bcd60e51b8152600401610ae5906137e0565b6001600160a01b03821661141e576040516305519d6f60e51b815260206004820152601860248201527778416c6c6f636174696f6e566f74696e674164647265737360401b6044820152606401610ae5565b6000611428612dfd565b6002810180546001600160a01b038681166001600160a01b03198316811790935560405193945016918291907f897acaec25783ce4cf8ff29c16715e089a40d285e2e5d6fcf567af00f471425990600090a350505050565b60008061148b612dfd565b600181015460405163e52ef17f60e01b8152600481018690529192506001600160a01b03169063e52ef17f90602401602060405180830381865afa9250505080156114f3575060408051601f3d908101601f191682019092526114f09181019061384b565b60015b6115005750600092915050565b8061150f575060009392505050565b506000928352600781016020908152604080852054600a909301909152909220549190911015919050565b60008051602061393f8339815191526115538133612421565b806115645750611564600033612421565b6115805760405162461bcd60e51b8152600401610ae5906137e0565b6001600160a01b0382166115c5576040516305519d6f60e51b815260206004820152600b60248201526a623374724164647265737360a81b6044820152606401610ae5565b60006115cf612dfd565b80546001600160a01b038581166001600160a01b03198316811784556040519394509116918291907fb3061a8192d243178b0fd92d1809bc86c3fa3b177c046cf74974c45c32cd25e090600090a350505050565b60008061162e612dfd565b60028101546040516368377f6d60e11b8152600481018690529192506000916001600160a01b039091169063d06efeda906024015b602060405180830381865afa158015611680573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116a491906138a6565b905081600f0154816116b691906138bf565b4310949350505050565b6116c8612eca565b6116d182612f6f565b6116db8282612f87565b5050565b6000806116ea612dfd565b6000848152600782016020908152604080832054600a8501909252909120549192509081811061171f57506000949350505050565b600061172b828461379e565b9050600084600c015485600b015461174391906138bf565b905060006117518284613884565b98975050505050505050565b600061176761303b565b5060008051602061399f83398151915290565b600080611785612dfd565b60009384526003016020525050604090205490565b6001600160a01b0381166117c1576040516305519d6f60e51b8152600401610ae5906138d2565b60006117cb612dfd565b6001600160a01b0383166000908152600d8201602052604090205490915060ff161561180c5781604051634df9fbcf60e01b8152600401610ae591906134ae565b6001600160a01b0382166000818152600d830160209081526040808320805460ff19166001908117909155600e860180549182018155845291832090910180546001600160a01b03191684179055517fc3b80e866c8bfbccbded69771f510856bb44660d40a0b760d9f0781728543e4e9190a25050565b60008051602061393f83398151915261189c8133612421565b806118ad57506118ad600033612421565b6118c95760405162461bcd60e51b8152600401610ae5906137e0565b6001600160a01b038216611913576040516305519d6f60e51b815260206004820152601060248201526f656d697373696f6e734164647265737360801b6044820152606401610ae5565b600061191d612dfd565b6001810180546001600160a01b038681166001600160a01b03198316811790935560405193945016918291907fee0bb99897b3f409686cb6e56601a38cea38e9e00d9b28752b3be7b28ea8b0ad90600090a350505050565b600061197f612dfd565b905061198a84612cda565b6119945750505050565b826001600160a01b0316826001600160a01b031603611a2e5760405162461bcd60e51b815260206004820152605c60248201526000805160206139df83398151915260448201527f75736572732063616e6e6f7420636c61696d20666f72207468656d73656c766560648201527b1cc8191d5c9a5b99c819585c9b1e481858d8d95cdcc81c195c9a5bd960221b608482015260a401610ae5565b6001600160a01b0382166000908152600d8201602052604090205460ff16611acc5760405162461bcd60e51b81526020600482015260576024820152600080516020613a1f83398151915260448201527f74206120726567697374657265642072656c6179657220647572696e6720636c606482015276185a5b4819585c9b1e481858d8d95cdcc81c195c9a5bd9604a1b608482015260a401610ae5565b6112078383613084565b60026000611ae2612d1e565b8054909150600160401b900460ff1680611b09575080546001600160401b03808416911610155b15611b275760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160481b0319166001600160401b03831617600160401b1760ff60401b1916815560405160008051602061395f83398151915290611b6b908490613744565b60405180910390a15050565b60008051602061393f833981519152611b908133612421565b80611ba15750611ba1600033612421565b611bbd5760405162461bcd60e51b8152600401610ae5906137e0565b6000611bc7612dfd565b9050611bd483600261386d565b6000858152600683016020526040902055600c810154600b820154611bf991906138bf565b611c03908461386d565b600085815260078301602081815260408084208590556006860182529283902054918152600e85015483518881529182019290925291820192909252606081019190915284907f0cfbd04f27dfdd7116e3d63de583a7cc8a337032164396bb6d7cac1deffbe415906080015b60405180910390a250505050565b600080611c88612dfd565b600f015492915050565b600080611c9d612dfd565b6001600160a01b0393841660009081526013909101602052604090205490921692915050565b60008051602061393f833981519152611cd