UNPKG

@vechain/vebetterdao-contracts

Version:

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

1,552 lines 107 kB
{ "_format": "hh-sol-artifact-1", "contractName": "GrantsManagerV1", "sourceName": "contracts/deprecated/V1/GrantsManagerV1.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": "caller", "type": "address" }, { "internalType": "address", "name": "recipient", "type": "address" } ], "name": "CallerIsNotTheGrantReceiver", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "implementation", "type": "address" } ], "name": "ERC1967InvalidImplementation", "type": "error" }, { "inputs": [], "name": "ERC1967NonPayable", "type": "error" }, { "inputs": [], "name": "EnforcedPause", "type": "error" }, { "inputs": [], "name": "ExpectedPause", "type": "error" }, { "inputs": [], "name": "FailedInnerCall", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "proposalId", "type": "uint256" } ], "name": "GrantAlreadyCompleted", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "proposalId", "type": "uint256" } ], "name": "GrantAlreadyRejected", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "availableFunds", "type": "uint256" }, { "internalType": "uint256", "name": "requiredFunds", "type": "uint256" } ], "name": "InsufficientFunds", "type": "error" }, { "inputs": [], "name": "InvalidAmount", "type": "error" }, { "inputs": [ { "internalType": "bytes4", "name": "selector", "type": "bytes4" } ], "name": "InvalidFunctionSelector", "type": "error" }, { "inputs": [], "name": "InvalidInitialization", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "proposalId", "type": "uint256" }, { "internalType": "uint256", "name": "milestoneIndex", "type": "uint256" } ], "name": "InvalidMilestoneIndex", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "provided", "type": "uint256" }, { "internalType": "uint256", "name": "required", "type": "uint256" } ], "name": "InvalidNumberOfMilestones", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "target", "type": "address" } ], "name": "InvalidTarget", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "proposalId", "type": "uint256" }, { "internalType": "uint256", "name": "milestoneIndex", "type": "uint256" } ], "name": "MilestoneAlreadyApproved", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "proposalId", "type": "uint256" }, { "internalType": "uint256", "name": "milestoneIndex", "type": "uint256" } ], "name": "MilestoneAlreadyClaimed", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "milestoneIndex", "type": "uint256" } ], "name": "MilestoneAmountZero", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "claimedAmount", "type": "uint256" }, { "internalType": "uint256", "name": "totalAmount", "type": "uint256" } ], "name": "MilestoneClaimedAmountExceedsTotalAmount", "type": "error" }, { "inputs": [], "name": "MilestoneDetailsMetadataURIEmpty", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "proposalId", "type": "uint256" }, { "internalType": "uint256", "name": "milestoneIndex", "type": "uint256" } ], "name": "MilestoneNotApprovedByAdmin", "type": "error" }, { "inputs": [], "name": "MilestoneProposerZeroAddress", "type": "error" }, { "inputs": [ { "internalType": "enum IGrantsManagerV1.MilestoneState", "name": "status", "type": "uint8" } ], "name": "MilestoneStateNotPending", "type": "error" }, { "inputs": [], "name": "MilestoneTotalAmountZero", "type": "error" }, { "inputs": [], "name": "NotAuthorized", "type": "error" }, { "inputs": [], "name": "NotInitializing", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "proposalId", "type": "uint256" }, { "internalType": "uint256", "name": "milestoneIndex", "type": "uint256" } ], "name": "PreviousMilestoneNotApproved", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "proposalId", "type": "uint256" } ], "name": "ProposalNotExecuted", "type": "error" }, { "inputs": [], "name": "ReentrancyGuardReentrantCall", "type": "error" }, { "inputs": [], "name": "TransferFailed", "type": "error" }, { "inputs": [], "name": "UUPSUnauthorizedCallContext", "type": "error" }, { "inputs": [ { "internalType": "bytes32", "name": "slot", "type": "bytes32" } ], "name": "UUPSUnsupportedProxiableUUID", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "proposalId", "type": "uint256" } ], "name": "GrantCanceled", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "proposalId", "type": "uint256" }, { "indexed": false, "internalType": "address", "name": "newGrantsReceiver", "type": "address" } ], "name": "GrantsReceiverUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint64", "name": "version", "type": "uint64" } ], "name": "Initialized", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "proposalId", "type": "uint256" }, { "indexed": true, "internalType": "uint256", "name": "milestoneIndex", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "MilestoneClaimed", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "proposalId", "type": "uint256" }, { "indexed": false, "internalType": "string", "name": "newMilestoneMetadataURI", "type": "string" } ], "name": "MilestoneMetadataURIUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "proposalId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "MilestoneRejectedAndFundsReturnedToTreasury", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "proposalId", "type": "uint256" }, { "indexed": true, "internalType": "uint256", "name": "milestoneIndex", "type": "uint256" } ], "name": "MilestoneValidated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "proposalId", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "proposer", "type": "address" }, { "indexed": true, "internalType": "address", "name": "grantsReceiver", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "totalAmount", "type": "uint256" }, { "indexed": false, "internalType": "string", "name": "metadataURI", "type": "string" } ], "name": "MilestonesCreated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "account", "type": "address" } ], "name": "Paused", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "bytes32", "name": "previousAdminRole", "type": "bytes32" }, { "indexed": true, "internalType": "bytes32", "name": "newAdminRole", "type": "bytes32" } ], "name": "RoleAdminChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "RoleGranted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "RoleRevoked", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "account", "type": "address" } ], "name": "Unpaused", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "implementation", "type": "address" } ], "name": "Upgraded", "type": "event" }, { "inputs": [], "name": "DEFAULT_ADMIN_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "GOVERNANCE_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "GRANTS_APPROVER_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "GRANTS_REJECTOR_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "PAUSER_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": "proposalId", "type": "uint256" }, { "internalType": "uint256", "name": "milestoneIndex", "type": "uint256" }, { "internalType": "string", "name": "reason", "type": "string" } ], "name": "approveMilestoneWithReason", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "proposalId", "type": "uint256" }, { "internalType": "uint256", "name": "milestoneIndex", "type": "uint256" } ], "name": "approveMilestones", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "proposalId", "type": "uint256" }, { "internalType": "uint256", "name": "milestoneIndex", "type": "uint256" } ], "name": "claimMilestone", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "metadataURI", "type": "string" }, { "internalType": "uint256", "name": "proposalId", "type": "uint256" }, { "internalType": "address", "name": "proposer", "type": "address" }, { "internalType": "address", "name": "grantsReceiver", "type": "address" }, { "internalType": "bytes[]", "name": "calldatas", "type": "bytes[]" } ], "name": "createMilestones", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "getB3trContract", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getGovernorContract", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "proposalId", "type": "uint256" } ], "name": "getGrantProposal", "outputs": [ { "components": [ { "internalType": "uint256", "name": "id", "type": "uint256" }, { "internalType": "uint256", "name": "totalAmount", "type": "uint256" }, { "internalType": "uint256", "name": "claimedAmount", "type": "uint256" }, { "internalType": "address", "name": "proposer", "type": "address" }, { "internalType": "address", "name": "grantsReceiver", "type": "address" }, { "components": [ { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "bool", "name": "isClaimed", "type": "bool" }, { "internalType": "bool", "name": "isApproved", "type": "bool" }, { "internalType": "bool", "name": "isRejected", "type": "bool" }, { "internalType": "string", "name": "reason", "type": "string" } ], "internalType": "struct IGrantsManagerV1.Milestone[]", "name": "milestones", "type": "tuple[]" }, { "internalType": "string", "name": "metadataURI", "type": "string" } ], "internalType": "struct IGrantsManagerV1.GrantProposal", "name": "", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "proposalId", "type": "uint256" } ], "name": "getGrantsReceiverAddress", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "proposalId", "type": "uint256" }, { "internalType": "uint256", "name": "milestoneIndex", "type": "uint256" } ], "name": "getMilestone", "outputs": [ { "components": [ { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "bool", "name": "isClaimed", "type": "bool" }, { "internalType": "bool", "name": "isApproved", "type": "bool" }, { "internalType": "bool", "name": "isRejected", "type": "bool" }, { "internalType": "string", "name": "reason", "type": "string" } ], "internalType": "struct IGrantsManagerV1.Milestone", "name": "", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "proposalId", "type": "uint256" } ], "name": "getMilestoneMetadataURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "proposalId", "type": "uint256" } ], "name": "getMilestones", "outputs": [ { "components": [ { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "bool", "name": "isClaimed", "type": "bool" }, { "internalType": "bool", "name": "isApproved", "type": "bool" }, { "internalType": "bool", "name": "isRejected", "type": "bool" }, { "internalType": "string", "name": "reason", "type": "string" } ], "internalType": "struct IGrantsManagerV1.Milestone[]", "name": "", "type": "tuple[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getMinimumMilestoneCount", "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": "milestoneId", "type": "uint256" } ], "name": "getTotalAmountForMilestones", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getTreasuryContract", "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": "uint256", "name": "proposalId", "type": "uint256" } ], "name": "grantState", "outputs": [ { "internalType": "enum IGrantsManagerV1.GrantState", "name": "", "type": "uint8" } ], "stateMutability": "view", "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": "_governor", "type": "address" }, { "internalType": "address", "name": "_treasury", "type": "address" }, { "internalType": "address", "name": "defaultAdmin", "type": "address" }, { "internalType": "address", "name": "_b3tr", "type": "address" }, { "internalType": "uint256", "name": "_minimumMilestoneCount", "type": "uint256" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "proposalId", "type": "uint256" }, { "internalType": "uint256", "name": "milestoneIndex", "type": "uint256" } ], "name": "isClaimable", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "proposalId", "type": "uint256" } ], "name": "isGrantCompleted", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "proposalId", "type": "uint256" } ], "name": "isGrantInDevelopment", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "proposalId", "type": "uint256" } ], "name": "isGrantRejected", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "proposalId", "type": "uint256" }, { "internalType": "uint256", "name": "milestoneIndex", "type": "uint256" } ], "name": "milestoneState", "outputs": [ { "internalType": "enum IGrantsManagerV1.MilestoneState", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "pause", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "paused", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "proxiableUUID", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "proposalId", "type": "uint256" } ], "name": "rejectMilestones", "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": "_b3tr", "type": "address" } ], "name": "setB3trContract", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_governor", "type": "address" } ], "name": "setGovernorContract", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "minimumMilestoneCount", "type": "uint256" } ], "name": "setMinimumMilestoneCount", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_treasury", "type": "address" } ], "name": "setTreasuryContract", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes4", "name": "interfaceId", "type": "bytes4" } ], "name": "supportsInterface", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "unpause", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "proposalId", "type": "uint256" }, { "internalType": "address", "name": "newGrantsReceiver", "type": "address" } ], "name": "updateGrantsReceiver", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "proposalId", "type": "uint256" }, { "internalType": "string", "name": "newMilestoneMetadataURI", "type": "string" } ], "name": "updateMilestoneMetadataURI", "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": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "pure", "type": "function" } ], "bytecode": "0x60a0604052306080523480156200001557600080fd5b506200002062000026565b620000da565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff1615620000775760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b0390811614620000d75780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6080516147a362000104600039600081816132020152818161322b015261337501526147a36000f3fe6080604052600436106102175760003560e01c806219cce61461021c578063012947641461024757806301ffc9a71461026a57806306c498221461029a5780631ed65110146102bc57806321afd1f6146102dc578063248a9ca3146102fe57806324ad94cd1461031e57806326c74fc31461034b5780632f2ff15d1461036057806336568abe146103805780633f36cd7f146103a05780633f4ba83a146103c257806342c549c0146103d75780634f1ef2861461040457806352d1902d1461041757806354b90b7b1461042c57806354fd4d501461044c5780635ade3874146104605780635c975abb14610480578063767b1602146104955780637da17bf3146104b5578063808860a5146104d55780638456cb59146104f55780638ed9895c1461050a57806391d14854146105375780639b15408714610557578063a217fddf14610577578063ad3cb1cc1461058c578063b2a2eef9146105ca578063b3396778146105ea578063bfda4e7c1461060a578063c1a45a6a14610637578063c224938914610657578063c266aef714610677578063c42433b414610697578063c4ec8f98146106b7578063cff28c70146106cc578063d547741f146106ec578063da104fac1461070c578063e03d759b1461072c578063e63ab1e91461074c578063e9af5d1b1461076e578063f23e227b1461079b578063f36c8f5c146107bb578063f7013ef6146107dd578063f72c0d8b146107fd575b600080fd5b34801561022857600080fd5b5061023161081f565b60405161023e9190613dfa565b60405180910390f35b34801561025357600080fd5b5061025c61083d565b60405190815260200161023e565b34801561027657600080fd5b5061028a610285366004613e0e565b610852565b604051901515815260200161023e565b3480156102a657600080fd5b506102ba6102b5366004613e4d565b610889565b005b3480156102c857600080fd5b506102ba6102d7366004613e4d565b6108c4565b3480156102e857600080fd5b5061025c60008051602061468e83398151915281565b34801561030a57600080fd5b5061025c610319366004613e6a565b6108ff565b34801561032a57600080fd5b5061033e610339366004613e6a565b61091f565b60405161023e9190613f16565b34801561035757600080fd5b50610231610b96565b34801561036c57600080fd5b506102ba61037b366004613fdb565b610bb4565b34801561038c57600080fd5b506102ba61039b366004613fdb565b610bd6565b3480156103ac57600080fd5b5061025c60008051602061474e83398151915281565b3480156103ce57600080fd5b506102ba610c0e565b3480156103e357600080fd5b506103f76103f2366004613e6a565b610c7a565b60405161023e919061400b565b6102ba610412366004614122565b610dc6565b34801561042357600080fd5b5061025c610de1565b34801561043857600080fd5b506102ba610447366004613e4d565b610dfe565b34801561045857600080fd5b50600161025c565b34801561046c57600080fd5b5061025c61047b366004613e6a565b610e39565b34801561048c57600080fd5b5061028a610e44565b3480156104a157600080fd5b506102ba6104b0366004614171565b610e59565b3480156104c157600080fd5b5061028a6104d0366004613e6a565b610fd1565b3480156104e157600080fd5b506102ba6104f0366004614193565b611254565b34801561050157600080fd5b506102ba6117e5565b34801561051657600080fd5b5061052a610525366004614171565b61184d565b60405161023e91906142a8565b34801561054357600080fd5b5061028a610552366004613fdb565b6119ae565b34801561056357600080fd5b5061028a610572366004613e6a565b6119e4565b34801561058357600080fd5b5061025c600081565b34801561059857600080fd5b506105bd604051806040016040528060058152602001640352e302e360dc1b81525081565b60405161023e91906142bb565b3480156105d657600080fd5b506102ba6105e5366004613e6a565b611d05565b3480156105f657600080fd5b506102ba6106053660046142ce565b611d25565b34801561061657600080fd5b5061062a610625366004613e6a565b611ebe565b60405161023e9190614333565b34801561064357600080fd5b5061028a610652366004614171565b611fb3565b34801561066357600080fd5b5061028a610672366004613e6a565b611fda565b34801561068357600080fd5b506102ba610692366004614171565b612300565b3480156106a357600080fd5b506102ba6106b236600461434d565b61277a565b3480156106c357600080fd5b5061023161281a565b3480156106d857600080fd5b506105bd6106e7366004613e6a565b612838565b3480156106f857600080fd5b506102ba610707366004613fdb565b6128ea565b34801561071857600080fd5b50610231610727366004613e6a565b612906565b34801561073857600080fd5b506102ba610747366004613fdb565b61292f565b34801561075857600080fd5b5061025c60008051602061472e83398151915281565b34801561077a57600080fd5b5061078e610789366004614171565b612a16565b60405161023e919061437d565b3480156107a757600080fd5b506102ba6107b6366004613e6a565b612a29565b3480156107c757600080fd5b5061025c6000805160206146ae83398151915281565b3480156107e957600080fd5b506102ba6107f8366004614391565b612cee565b34801561080957600080fd5b5061025c6000805160206146ee83398151915281565b60008061082a613032565b600101546001600160a01b031692915050565b600080610848613032565b6004015492915050565b60006001600160e01b03198216637965db0b60e01b148061088357506301ffc9a760e01b6001600160e01b03198316145b92915050565b600061089481613056565b600061089e613032565b60010180546001600160a01b0319166001600160a01b0394909416939093179092555050565b60006108cf81613056565b60006108d9613032565b60020180546001600160a01b0319166001600160a01b0394909416939093179092555050565b60008061090a613063565b60009384526020525050604090206001015490565b6109716040518060e0016040528060008152602001600081526020016000815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160608152602001606081525090565b600061097b613032565b600084815260208281526040808320815160e0810183528154815260018201548185015260028201548184015260038201546001600160a01b03908116606083015260048301541660808201526005820180548451818702810187019095528085529697509095919460a087019491929184015b82821015610af45760008481526020908190206040805160a0810182526003860290920180548352600181015460ff808216151595850195909552610100810485161515928401929092526201000090910490921615156060820152600282018054919291608084019190610a63906143f5565b80601f0160208091040260200160405190810160405280929190818152602001828054610a8f906143f5565b8015610adc5780601f10610ab157610100808354040283529160200191610adc565b820191906000526020600020905b815481529060010190602001808311610abf57829003601f168201915b505050505081525050815260200190600101906109ef565b505050508152602001600682018054610b0c906143f5565b80601f0160208091040260200160405190810160405280929190818152602001828054610b38906143f5565b8015610b855780601f10610b5a57610100808354040283529160200191610b85565b820191906000526020600020905b815481529060010190602001808311610b6857829003601f168201915b505050505081525050915050919050565b600080610ba1613032565b600201546001600160a01b031692915050565b610bbd826108ff565b610bc681613056565b610bd08383613087565b50505050565b6001600160a01b0381163314610bff5760405163334bd91960e11b815260040160405180910390fd5b610c098282613128565b505050565b60008051602061472e8339815191526000610c27613032565b9050610c3382336119ae565b80610c515750610c516000805160206146ae833981519152336119ae565b610c6e5760405163ea8e4eb560e01b815260040160405180910390fd5b610c766131a0565b5050565b60606000610c86613032565b600084815260208281526040808320600501805482518185028101850190935280835294955090939092909184015b82821015610dba5760008481526020908190206040805160a0810182526003860290920180548352600181015460ff808216151595850195909552610100810485161515928401929092526201000090910490921615156060820152600282018054919291608084019190610d29906143f5565b80601f0160208091040260200160405190810160405280929190818152602001828054610d55906143f5565b8015610da25780601f10610d7757610100808354040283529160200191610da2565b820191906000526020600020905b815481529060010190602001808311610d8557829003601f168201915b50505050508152505081526020019060010190610cb5565b50505050915050919050565b610dce6131f7565b610dd78261329e565b610c7682826132b6565b6000610deb61336a565b5060008051602061470e83398151915290565b6000610e0981613056565b6000610e13613032565b60030180546001600160a01b0319166001600160a01b0394909416939093179092555050565b60008061090a613032565b600080610e4f6133b3565b5460ff1692915050565b60008051602061474e8339815191526000610e72613032565b9050610e7e82336119ae565b80610e9c5750610e9c6000805160206146ae833981519152336119ae565b610eb95760405163ea8e4eb560e01b815260040160405180910390fd5b6000610ec3613032565b9050610ece856133d7565b610ed8858561348d565b8315610f61576000610ef486610eef600188614445565b6134cf565b90506001816003811115610f0a57610f0a61431d565b14158015610f2a57506002816003811115610f2757610f2761431d565b14155b15610f5f5785610f3b600187614445565b60405163414e3ac760e01b8152600401610f56929190614458565b60405180910390fd5b505b600085815260208290526040902060050180546001919086908110610f8857610f88614466565b60009182526020822060016003909202010180549215156101000261ff001990931692909217909155604051859187916000805160206146ce8339815191529190a35050505050565b600080610fdc613032565b600084815260208281526040808320815160e0810183528154815260018201548185015260028201548184015260038201546001600160a01b039081166060830152600483015416608082015260058201805484518187028101870190955280855296975094959094919360a0860193929190879084015b828210156111595760008481526020908190206040805160a0810182526003860290920180548352600181015460ff8082161515958501959095526101008104851615159284019290925262010000909104909216151560608201526002820180549192916080840191906110c8906143f5565b80601f01602080910402602001604051908101604052809291908181526020018280546110f4906143f5565b80156111415780601f1061111657610100808354040283529160200191611141565b820191906000526020600020905b81548152906001019060200180831161112457829003601f168201915b50505050508152505081526020019060010190611054565b505050508152602001600682018054611171906143f5565b80601f016020809104026020016040519081016040528092919081815260200182805461119d906143f5565b80156111ea5780601f106111bf576101008083540402835291602001916111ea565b820191906000526020600020905b8154815290600101906020018083116111cd57829003601f168201915b505050505081525050905060005b8160a0015151811015611249578160a00151818151811061121b5761121b614466565b6020026020010151606001511561123757506001949350505050565b806112418161447c565b9150506111f8565b506000949350505050565b600061125e613032565b90506112786000805160206146ae833981519152336119ae565b6112955760405163ea8e4eb560e01b815260040160405180910390fd5b61129d613757565b60006112a7613032565b6000878152602082905260408120919250805b855181101561152e5760008682815181106112d7576112d7614466565b602090810291909101810151908101519091506001600160e01b03198116638e184b3f60e01b14611327576040516310cb7cf160e21b81526001600160e01b031982166004820152602401610f56565b6000600483516113379190614445565b6001600160401b0381111561134e5761134e61406d565b6040519080825280601f01601f191660200182016040528015611378576020820181803683370190505b50905060005b81518110156113e95783611393826004614495565b815181106113a3576113a3614466565b602001015160f81c60f81b8282815181106113c0576113c0614466565b60200101906001600160f81b031916908160001a905350806113e18161447c565b91505061137e565b506000808280602001905181019061140191906144a8565b90925090506001600160a01b0382163014611431578160405163d08525e960e01b8152600401610f569190613dfa565b806000036114525760405163162908e360e11b815260040160405180910390fd5b61145c8188614495565b60008f815260208b81526040808320815160a08101835286815280840185815281840186815260608301878152855180880190965287865260808401958652600590940180546001818101835591895296909720835160039097020195865590519585018054915193511515620100000262ff0000199415156101000261ff00199815159890981661ffff199093169290921796909617929092169190911790935551929950909160028201906115139082614524565b505050505050505080806115269061447c565b9150506112ba565b508782556003820180546001600160a01b0319166001600160a01b0389161790556006820161155d8a82614524565b50600182018190556000600283018190556004830180546001600160a01b0319166001600160a01b038981169182179092556040805160e08101825286548152602080820187905281830186905260038801549094166060820152608081019290925260058601805482518186028101860190935280835261178c959394889460a087019493929184015b828210156116ed5760008481526020908190206040805160a0810182526003860290920180548352600181015460ff80821615159585019590955261010081048516151592840192909252620100009091049092161515606082015260028201805491929160808401919061165c906143f5565b80601f0160208091040260200160405190810160405280929190818152602001828054611688906143f5565b80156116d55780601f106116aa576101008083540402835291602001916116d5565b820191906000526020600020905b8154815290600101906020018083116116b857829003601f168201915b505050505081525050815260200190600101906115e8565b505050508152602001600682018054611705906143f5565b80601f0160208091040260200160405190810160405280929190818152602001828054611731906143f5565b801561177e5780601f106117535761010080835404028352916020019161177e565b820191906000526020600020905b81548152906001019060200180831161176157829003601f168201915b50505050508152505061377d565b856001600160a01b0316876001600160a01b0316897f4881acb9050bcf1b58cd99d39b4d4497e03c9961e7466fdb95d6e422cd6f9553848d6040516117d29291906145e3565b60405180910390a4505050505050505050565b60008051602061472e83398151915260006117fe613032565b905061180a82336119ae565b8061182857506118286000805160206146ae833981519152336119ae565b6118455760405163ea8e4eb560e01b815260040160405180910390fd5b610c766138ff565b6118856040518060a0016040528060008152602001600015158152602001600015158152602001600015158152602001606081525090565b600061188f613032565b6000858152602082905260409020600501805491925090849081106118b6576118b6614466565b60009182526020918290206040805160a081018252600390930290910180548352600181015460ff808216151595850195909552610100810485161515928401929092526201000090910490921615156060820152600282018054919291608084019190611923906143f5565b80601f016020809104026020016040519081016040528092919081815260200182805461194f906143f5565b801561199c5780601f106119715761010080835404028352916020019161199c565b820191906000526020600020905b81548152906001019060200180831161197f57829003601f168201915b50505050508152505091505092915050565b6000806119b9613063565b6000948552602090815260408086206001600160a01b03959095168652939052505090205460ff1690565b6000806119ef613032565b600084815260208281526040808320815160e0810183528154815260018201548185015260028201548184015260038201546001600160a01b039081166060830152600483015416608082015260058201805484518187028101870190955280855296975094959094919360a0860193929190879084015b82821015611b6c5760008481526020908190206040805160a0810182526003860290920180548352600181015460ff808216151595850195909552610100810485161515928401929092526201000090910490921615156060820152600282018054919291608084019190611adb906143f5565b80601f0160208091040260200160405190810160405280929190818152602001828054611b07906143f5565b8015611b545780601f10611b2957610100808354040283529160200191611b54565b820191906000526020600020905b815481529060010190602001808311611b3757829003601f168201915b50505050508152505081526020019060010190611a67565b505050508152602001600682018054611b84906143f5565b80601f0160208091040260200160405190810160405280929190818152602001828054611bb0906143f5565b8015611bfd5780601f10611bd257610100808354040283529160200191611bfd565b820191906000526020600020905b815481529060010190602001808311611be057829003601f168201915b505050919092525050506001830154604051631f27a4f360e11b8152600481018790529192506000916001600160a01b0390911690633e4f49e690602401602060405180830381865afa158015611c58573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c7c91906145fc565b90506006816007811115611c9257611c9261431d565b14611ca257506000949350505050565b60005b8260a0015151811015611cf9576000611cbe87836134cf565b90506000816003811115611cd457611cd461431d565b03611ce6575060019695505050505050565b5080611cf18161447c565b915050611ca5565b50600095945050505050565b6000611d1081613056565b6000611d1a613032565b600401929092555050565b60008051602061474e8339815191526000611d3e613032565b9050611d4a82336119ae565b80611d685750611d686000805160206146ae833981519152336119ae565b611d855760405163ea8e4eb560e01b815260040160405180910390fd5b6000611d8f613032565b9050611d9a866133d7565b611da4868661348d565b8415611e04576000611dbb87610eef600189614445565b90506001816003811115611dd157611dd161431d565b14158015611df157506002816003811115611dee57611dee61431d565b14155b15611e025786610f3b600188614445565b505b600086815260208290526040902060050180546001919087908110611e2b57611e2b614466565b906000526020600020906003020160010160016101000a81548160ff021916908315150217905550838160000160008881526020019081526020016000206005018681548110611e7d57611e7d614466565b90600052602060002090600302016002019081611e9a9190614524565b50604051859087906000805160206146ce83398151915290600090a3505050505050565b600080611ec9613032565b6001810154604051631f27a4f360e11b8152600481018690529192506000916001600160a01b0390911690633e4f49e690602401602060405180830381865afa158015611f1a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f3e91906145fc565b9050611f4984610fd1565b15611f58575060029392505050565b611f61846119e4565b15611f70575060089392505050565b611f7984611