Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 28 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Execute | 14128659 | 1202 days ago | IN | 0 ETH | 0.04368853 | ||||
Queue | 14112487 | 1205 days ago | IN | 0 ETH | 0.01125607 | ||||
Cast Vote | 14041906 | 1215 days ago | IN | 0 ETH | 0.00685825 | ||||
Cast Vote | 14041400 | 1216 days ago | IN | 0 ETH | 0.00887437 | ||||
Cast Vote | 14041315 | 1216 days ago | IN | 0 ETH | 0.01072499 | ||||
Cast Vote | 14041250 | 1216 days ago | IN | 0 ETH | 0.00830205 | ||||
Cast Vote | 14041205 | 1216 days ago | IN | 0 ETH | 0.01069133 | ||||
Cast Vote | 14039816 | 1216 days ago | IN | 0 ETH | 0.01121734 | ||||
Cast Vote | 14039814 | 1216 days ago | IN | 0 ETH | 0.01119323 | ||||
Cast Vote | 14039664 | 1216 days ago | IN | 0 ETH | 0.01406738 | ||||
Cast Vote | 14038719 | 1216 days ago | IN | 0 ETH | 0.0204961 | ||||
Cast Vote | 14038579 | 1216 days ago | IN | 0 ETH | 0.0151653 | ||||
Cast Vote | 14038529 | 1216 days ago | IN | 0 ETH | 0.01705943 | ||||
Cast Vote | 14038272 | 1216 days ago | IN | 0 ETH | 0.01687537 | ||||
Cast Vote | 14037936 | 1216 days ago | IN | 0 ETH | 0.01041369 | ||||
Cast Vote | 14037936 | 1216 days ago | IN | 0 ETH | 0.01051578 | ||||
Cast Vote | 14037817 | 1216 days ago | IN | 0 ETH | 0.01044299 | ||||
Cast Vote | 14037715 | 1216 days ago | IN | 0 ETH | 0.0130621 | ||||
Cast Vote | 14037705 | 1216 days ago | IN | 0 ETH | 0.01147054 | ||||
Cast Vote | 14037674 | 1216 days ago | IN | 0 ETH | 0.01490825 | ||||
Cast Vote | 14037670 | 1216 days ago | IN | 0 ETH | 0.01381503 | ||||
Cast Vote | 14037661 | 1216 days ago | IN | 0 ETH | 0.01354394 | ||||
Cast Vote | 14037651 | 1216 days ago | IN | 0 ETH | 0.0200693 | ||||
Propose | 14037596 | 1216 days ago | IN | 0 ETH | 0.0670974 | ||||
Cancel | 14023187 | 1218 days ago | IN | 0 ETH | 0.00789633 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
GovernorAlpha
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity 0.6.12; pragma experimental ABIEncoderV2; contract GovernorAlpha { /// @notice The name of this contract string public constant name = "PEAKDEFI Governor Alpha"; /// @notice The number of votes in support of a proposal required in order for a quorum to be reached and for a vote to succeed function quorumVotes() public pure returns (uint) { return 40_000_000e8; } // 40,000,000 = 4% of PEAK /// @notice The number of votes required in order for a voter to become a proposer function proposalThreshold() public pure returns (uint) { return 10_000_000e8; } // 10,000,000 = 1% of PEAK /// @notice The maximum number of actions that can be included in a proposal function proposalMaxOperations() public pure returns (uint) { return 10; } // 10 actions /// @notice The delay before voting on a proposal may take place, once proposed function votingDelay() public pure returns (uint) { return 1; } // 1 block /// @notice The duration of voting on a proposal, in blocks function votingPeriod() public pure returns (uint) { return 40_320; } // ~7 days in blocks (assuming 15s blocks) /// @notice The address of the PEAKDEFI protocol Timelock TimelockInterface public timelock; /// @notice The address of the PEAK governance token PeakInterface public peak; /// @notice The address of the Governor Guardian address public guardian; /// @notice The total number of proposals uint public proposalCount; struct Proposal { /// @notice Unique id for looking up a proposal uint id; /// @notice Creator of the proposal address proposer; /// @notice The timestamp that the proposal will be available for execution, set once the vote succeeds uint eta; /// @notice the ordered list of target addresses for calls to be made address[] targets; /// @notice The ordered list of values (i.e. msg.value) to be passed to the calls to be made uint[] values; /// @notice The ordered list of function signatures to be called string[] signatures; /// @notice The ordered list of calldata to be passed to each call bytes[] calldatas; /// @notice The block at which voting begins: holders must delegate their votes prior to this block uint startBlock; /// @notice The block at which voting ends: votes must be cast prior to this block uint endBlock; /// @notice Current number of votes in favor of this proposal uint forVotes; /// @notice Current number of votes in opposition to this proposal uint againstVotes; /// @notice Flag marking whether the proposal has been canceled bool canceled; /// @notice Flag marking whether the proposal has been executed bool executed; /// @notice Receipts of ballots for the entire set of voters mapping (address => Receipt) receipts; } /// @notice Ballot receipt record for a voter struct Receipt { /// @notice Whether or not a vote has been cast bool hasVoted; /// @notice Whether or not the voter supports the proposal bool support; /// @notice The number of votes the voter had, which were cast uint256 votes; } /// @notice Possible states that a proposal may be in enum ProposalState { Pending, Active, Canceled, Defeated, Succeeded, Queued, Expired, Executed } /// @notice The official record of all proposals ever proposed mapping (uint => Proposal) public proposals; /// @notice The latest proposal for each proposer mapping (address => uint) public latestProposalIds; /// @notice The EIP-712 typehash for the contract's domain bytes32 public constant DOMAIN_TYPEHASH = keccak256("EIP712Domain(string name,uint256 chainId,address verifyingContract)"); /// @notice The EIP-712 typehash for the ballot struct used by the contract bytes32 public constant BALLOT_TYPEHASH = keccak256("Ballot(uint256 proposalId,bool support)"); /// @notice An event emitted when a new proposal is created event ProposalCreated(uint id, address proposer, address[] targets, uint[] values, string[] signatures, bytes[] calldatas, uint startBlock, uint endBlock, string description); /// @notice An event emitted when a vote has been cast on a proposal event VoteCast(address voter, uint proposalId, bool support, uint votes); /// @notice An event emitted when a proposal has been canceled event ProposalCanceled(uint id); /// @notice An event emitted when a proposal has been queued in the Timelock event ProposalQueued(uint id, uint eta); /// @notice An event emitted when a proposal has been executed in the Timelock event ProposalExecuted(uint id); constructor(address timelock_, address peak_, address guardian_) public { timelock = TimelockInterface(timelock_); peak = PeakInterface(peak_); guardian = guardian_; } function propose(address[] memory targets, uint[] memory values, string[] memory signatures, bytes[] memory calldatas, string memory description) public returns (uint) { require(peak.getPriorVotes(msg.sender, sub256(block.number, 1)) > proposalThreshold(), "GovernorAlpha::propose: proposer votes below proposal threshold"); require(targets.length == values.length && targets.length == signatures.length && targets.length == calldatas.length, "GovernorAlpha::propose: proposal function information arity mismatch"); require(targets.length != 0, "GovernorAlpha::propose: must provide actions"); require(targets.length <= proposalMaxOperations(), "GovernorAlpha::propose: too many actions"); uint latestProposalId = latestProposalIds[msg.sender]; if (latestProposalId != 0) { ProposalState proposersLatestProposalState = state(latestProposalId); require(proposersLatestProposalState != ProposalState.Active, "GovernorAlpha::propose: one live proposal per proposer, found an already active proposal"); require(proposersLatestProposalState != ProposalState.Pending, "GovernorAlpha::propose: one live proposal per proposer, found an already pending proposal"); } uint startBlock = add256(block.number, votingDelay()); uint endBlock = add256(startBlock, votingPeriod()); proposalCount++; Proposal memory newProposal = Proposal({ id: proposalCount, proposer: msg.sender, eta: 0, targets: targets, values: values, signatures: signatures, calldatas: calldatas, startBlock: startBlock, endBlock: endBlock, forVotes: 0, againstVotes: 0, canceled: false, executed: false }); proposals[newProposal.id] = newProposal; latestProposalIds[newProposal.proposer] = newProposal.id; emit ProposalCreated(newProposal.id, msg.sender, targets, values, signatures, calldatas, startBlock, endBlock, description); return newProposal.id; } function queue(uint proposalId) public { require(state(proposalId) == ProposalState.Succeeded, "GovernorAlpha::queue: proposal can only be queued if it is succeeded"); Proposal storage proposal = proposals[proposalId]; uint eta = add256(block.timestamp, timelock.delay()); for (uint i = 0; i < proposal.targets.length; i++) { _queueOrRevert(proposal.targets[i], proposal.values[i], proposal.signatures[i], proposal.calldatas[i], eta); } proposal.eta = eta; emit ProposalQueued(proposalId, eta); } function _queueOrRevert(address target, uint value, string memory signature, bytes memory data, uint eta) internal { require(!timelock.queuedTransactions(keccak256(abi.encode(target, value, signature, data, eta))), "GovernorAlpha::_queueOrRevert: proposal action already queued at eta"); timelock.queueTransaction(target, value, signature, data, eta); } function execute(uint proposalId) public payable { require(state(proposalId) == ProposalState.Queued, "GovernorAlpha::execute: proposal can only be executed if it is queued"); Proposal storage proposal = proposals[proposalId]; proposal.executed = true; for (uint i = 0; i < proposal.targets.length; i++) { timelock.executeTransaction.value(proposal.values[i])(proposal.targets[i], proposal.values[i], proposal.signatures[i], proposal.calldatas[i], proposal.eta); } emit ProposalExecuted(proposalId); } function cancel(uint proposalId) public { ProposalState state = state(proposalId); require(state != ProposalState.Executed, "GovernorAlpha::cancel: cannot cancel executed proposal"); Proposal storage proposal = proposals[proposalId]; require(msg.sender == guardian || peak.getPriorVotes(proposal.proposer, sub256(block.number, 1)) < proposalThreshold(), "GovernorAlpha::cancel: proposer above threshold"); proposal.canceled = true; for (uint i = 0; i < proposal.targets.length; i++) { timelock.cancelTransaction(proposal.targets[i], proposal.values[i], proposal.signatures[i], proposal.calldatas[i], proposal.eta); } emit ProposalCanceled(proposalId); } function getActions(uint proposalId) public view returns (address[] memory targets, uint[] memory values, string[] memory signatures, bytes[] memory calldatas) { Proposal storage p = proposals[proposalId]; return (p.targets, p.values, p.signatures, p.calldatas); } function getReceipt(uint proposalId, address voter) public view returns (Receipt memory) { return proposals[proposalId].receipts[voter]; } function state(uint proposalId) public view returns (ProposalState) { require(proposalCount >= proposalId && proposalId > 0, "GovernorAlpha::state: invalid proposal id"); Proposal storage proposal = proposals[proposalId]; if (proposal.canceled) { return ProposalState.Canceled; } else if (block.number <= proposal.startBlock) { return ProposalState.Pending; } else if (block.number <= proposal.endBlock) { return ProposalState.Active; } else if (proposal.forVotes <= proposal.againstVotes || proposal.forVotes < quorumVotes()) { return ProposalState.Defeated; } else if (proposal.eta == 0) { return ProposalState.Succeeded; } else if (proposal.executed) { return ProposalState.Executed; } else if (block.timestamp >= add256(proposal.eta, timelock.GRACE_PERIOD())) { return ProposalState.Expired; } else { return ProposalState.Queued; } } function castVote(uint proposalId, bool support) public { return _castVote(msg.sender, proposalId, support); } function castVoteBySig(uint proposalId, bool support, uint8 v, bytes32 r, bytes32 s) public { bytes32 domainSeparator = keccak256(abi.encode(DOMAIN_TYPEHASH, keccak256(bytes(name)), getChainId(), address(this))); bytes32 structHash = keccak256(abi.encode(BALLOT_TYPEHASH, proposalId, support)); bytes32 digest = keccak256(abi.encodePacked("\x19\x01", domainSeparator, structHash)); address signatory = ecrecover(digest, v, r, s); require(signatory != address(0), "GovernorAlpha::castVoteBySig: invalid signature"); return _castVote(signatory, proposalId, support); } function _castVote(address voter, uint proposalId, bool support) internal { require(state(proposalId) == ProposalState.Active, "GovernorAlpha::_castVote: voting is closed"); Proposal storage proposal = proposals[proposalId]; Receipt storage receipt = proposal.receipts[voter]; require(receipt.hasVoted == false, "GovernorAlpha::_castVote: voter already voted"); uint256 votes = peak.getPriorVotes(voter, proposal.startBlock); if (support) { proposal.forVotes = add256(proposal.forVotes, votes); } else { proposal.againstVotes = add256(proposal.againstVotes, votes); } receipt.hasVoted = true; receipt.support = support; receipt.votes = votes; emit VoteCast(voter, proposalId, support, votes); } function __acceptAdmin() public { require(msg.sender == guardian, "GovernorAlpha::__acceptAdmin: sender must be gov guardian"); timelock.acceptAdmin(); } function __abdicate() public { require(msg.sender == guardian, "GovernorAlpha::__abdicate: sender must be gov guardian"); guardian = address(0); } function __queueSetTimelockPendingAdmin(address newPendingAdmin, uint eta) public { require(msg.sender == guardian, "GovernorAlpha::__queueSetTimelockPendingAdmin: sender must be gov guardian"); timelock.queueTransaction(address(timelock), 0, "setPendingAdmin(address)", abi.encode(newPendingAdmin), eta); } function __executeSetTimelockPendingAdmin(address newPendingAdmin, uint eta) public { require(msg.sender == guardian, "GovernorAlpha::__executeSetTimelockPendingAdmin: sender must be gov guardian"); timelock.executeTransaction(address(timelock), 0, "setPendingAdmin(address)", abi.encode(newPendingAdmin), eta); } function add256(uint256 a, uint256 b) internal pure returns (uint) { uint c = a + b; require(c >= a, "addition overflow"); return c; } function sub256(uint256 a, uint256 b) internal pure returns (uint) { require(b <= a, "subtraction underflow"); return a - b; } function getChainId() internal pure returns (uint) { uint chainId; assembly { chainId := chainid() } return chainId; } } interface TimelockInterface { function delay() external view returns (uint); function GRACE_PERIOD() external view returns (uint); function acceptAdmin() external; function queuedTransactions(bytes32 hash) external view returns (bool); function queueTransaction(address target, uint value, string calldata signature, bytes calldata data, uint eta) external returns (bytes32); function cancelTransaction(address target, uint value, string calldata signature, bytes calldata data, uint eta) external; function executeTransaction(address target, uint value, string calldata signature, bytes calldata data, uint eta) external payable returns (bytes memory); } interface PeakInterface { function getPriorVotes(address account, uint blockNumber) external view returns (uint256); }
{ "evmVersion": "istanbul", "libraries": {}, "metadata": { "bytecodeHash": "none", "useLiteralContent": true }, "optimizer": { "enabled": true, "runs": 200 }, "remappings": [], "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"timelock_","type":"address"},{"internalType":"address","name":"peak_","type":"address"},{"internalType":"address","name":"guardian_","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"}],"name":"ProposalCanceled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"address","name":"proposer","type":"address"},{"indexed":false,"internalType":"address[]","name":"targets","type":"address[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"},{"indexed":false,"internalType":"string[]","name":"signatures","type":"string[]"},{"indexed":false,"internalType":"bytes[]","name":"calldatas","type":"bytes[]"},{"indexed":false,"internalType":"uint256","name":"startBlock","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"endBlock","type":"uint256"},{"indexed":false,"internalType":"string","name":"description","type":"string"}],"name":"ProposalCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"}],"name":"ProposalExecuted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"eta","type":"uint256"}],"name":"ProposalQueued","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"voter","type":"address"},{"indexed":false,"internalType":"uint256","name":"proposalId","type":"uint256"},{"indexed":false,"internalType":"bool","name":"support","type":"bool"},{"indexed":false,"internalType":"uint256","name":"votes","type":"uint256"}],"name":"VoteCast","type":"event"},{"inputs":[],"name":"BALLOT_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DOMAIN_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"__abdicate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"__acceptAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newPendingAdmin","type":"address"},{"internalType":"uint256","name":"eta","type":"uint256"}],"name":"__executeSetTimelockPendingAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newPendingAdmin","type":"address"},{"internalType":"uint256","name":"eta","type":"uint256"}],"name":"__queueSetTimelockPendingAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"}],"name":"cancel","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"},{"internalType":"bool","name":"support","type":"bool"}],"name":"castVote","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"},{"internalType":"bool","name":"support","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"castVoteBySig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"}],"name":"execute","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"}],"name":"getActions","outputs":[{"internalType":"address[]","name":"targets","type":"address[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"},{"internalType":"string[]","name":"signatures","type":"string[]"},{"internalType":"bytes[]","name":"calldatas","type":"bytes[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"},{"internalType":"address","name":"voter","type":"address"}],"name":"getReceipt","outputs":[{"components":[{"internalType":"bool","name":"hasVoted","type":"bool"},{"internalType":"bool","name":"support","type":"bool"},{"internalType":"uint256","name":"votes","type":"uint256"}],"internalType":"struct GovernorAlpha.Receipt","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"guardian","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"latestProposalIds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"peak","outputs":[{"internalType":"contract PeakInterface","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proposalCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proposalMaxOperations","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"proposalThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"proposals","outputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"address","name":"proposer","type":"address"},{"internalType":"uint256","name":"eta","type":"uint256"},{"internalType":"uint256","name":"startBlock","type":"uint256"},{"internalType":"uint256","name":"endBlock","type":"uint256"},{"internalType":"uint256","name":"forVotes","type":"uint256"},{"internalType":"uint256","name":"againstVotes","type":"uint256"},{"internalType":"bool","name":"canceled","type":"bool"},{"internalType":"bool","name":"executed","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"targets","type":"address[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"},{"internalType":"string[]","name":"signatures","type":"string[]"},{"internalType":"bytes[]","name":"calldatas","type":"bytes[]"},{"internalType":"string","name":"description","type":"string"}],"name":"propose","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"}],"name":"queue","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"quorumVotes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"}],"name":"state","outputs":[{"internalType":"enum GovernorAlpha.ProposalState","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"timelock","outputs":[{"internalType":"contract TimelockInterface","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"votingDelay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"votingPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b506040516200322038038062003220833981016040819052620000349162000077565b600080546001600160a01b039485166001600160a01b031991821617909155600180549385169382169390931790925560028054919093169116179055620000e3565b6000806000606084860312156200008c578283fd5b83516200009981620000ca565b6020850151909350620000ac81620000ca565b6040850151909250620000bf81620000ca565b809150509250925092565b6001600160a01b0381168114620000e057600080fd5b50565b61312d80620000f36000396000f3fe60806040526004361061019c5760003560e01c80634634c61f116100ec578063d33219b41161008a578063ddf0b00911610064578063ddf0b00914610456578063deaaa7cc14610476578063e23a9a521461048b578063fe0d94c1146104b85761019c565b8063d33219b41461040c578063da35c66414610421578063da95691a146104365761019c565b80637bdbe4d0116100c65780637bdbe4d0146103ad57806391500671146103c2578063b58131b0146103e2578063b9a61961146103f75761019c565b80634634c61f146103635780635c07b6ea14610383578063760fbc13146103985761019c565b806321f43e42116101595780633932abb1116101335780633932abb1146102df5780633e4f49e6146102f457806340e58ee514610321578063452a9320146103415761019c565b806321f43e421461027a57806324bc1a641461029a578063328dd982146102af5761019c565b8063013cf08b146101a157806302a251a3146101df57806306fdde031461020157806315373e3d1461022357806317977c611461024557806320606b7014610265575b600080fd5b3480156101ad57600080fd5b506101c16101bc366004612375565b6104cb565b6040516101d699989796959493929190613015565b60405180910390f35b3480156101eb57600080fd5b506101f4610524565b6040516101d6919061276b565b34801561020d57600080fd5b5061021661052a565b6040516101d691906127e2565b34801561022f57600080fd5b5061024361023e3660046123b9565b61055d565b005b34801561025157600080fd5b506101f46102603660046121bd565b61056c565b34801561027157600080fd5b506101f461057e565b34801561028657600080fd5b506102436102953660046121d8565b6105a2565b3480156102a657600080fd5b506101f4610689565b3480156102bb57600080fd5b506102cf6102ca366004612375565b610694565b6040516101d69493929190612713565b3480156102eb57600080fd5b506101f4610923565b34801561030057600080fd5b5061031461030f366004612375565b610928565b6040516101d691906127ce565b34801561032d57600080fd5b5061024361033c366004612375565b610ab2565b34801561034d57600080fd5b50610356610d12565b6040516101d691906125cd565b34801561036f57600080fd5b5061024361037e3660046123e8565b610d21565b34801561038f57600080fd5b50610356610ed4565b3480156103a457600080fd5b50610243610ee3565b3480156103b957600080fd5b506101f4610f1f565b3480156103ce57600080fd5b506102436103dd3660046121d8565b610f24565b3480156103ee57600080fd5b506101f4610ff9565b34801561040357600080fd5b50610243611004565b34801561041857600080fd5b50610356611089565b34801561042d57600080fd5b506101f4611098565b34801561044257600080fd5b506101f4610451366004612202565b61109e565b34801561046257600080fd5b50610243610471366004612375565b6114b5565b34801561048257600080fd5b506101f461171f565b34801561049757600080fd5b506104ab6104a636600461238d565b611743565b6040516101d69190612f58565b6102436104c6366004612375565b6117a7565b6004602052600090815260409020805460018201546002830154600784015460088501546009860154600a870154600b9097015495966001600160a01b0390951695939492939192909160ff8082169161010090041689565b619d8090565b604051806040016040528060178152602001765045414b4445464920476f7665726e6f7220416c70686160481b81525081565b61056833838361196c565b5050565b60056020526000908152604090205481565b7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b6002546001600160a01b031633146105d55760405162461bcd60e51b81526004016105cc90612927565b60405180910390fd5b600080546040516001600160a01b0390911691630825f38f918391906105ff9087906020016125cd565b604051602081830303815290604052856040518563ffffffff1660e01b815260040161062e94939291906125fa565b600060405180830381600087803b15801561064857600080fd5b505af115801561065c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526106849190810190612302565b505050565b660e35fa931a000090565b6060806060806000600460008781526020019081526020016000209050806003018160040182600501836006018380548060200260200160405190810160405280929190818152602001828054801561071657602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116106f8575b505050505093508280548060200260200160405190810160405280929190818152602001828054801561076857602002820191906000526020600020905b815481526020019060010190808311610754575b5050505050925081805480602002602001604051908101604052809291908181526020016000905b8282101561083b5760008481526020908190208301805460408051601f60026000196101006001871615020190941693909304928301859004850281018501909152818152928301828280156108275780601f106107fc57610100808354040283529160200191610827565b820191906000526020600020905b81548152906001019060200180831161080a57829003601f168201915b505050505081526020019060010190610790565b50505050915080805480602002602001604051908101604052809291908181526020016000905b8282101561090d5760008481526020908190208301805460408051601f60026000196101006001871615020190941693909304928301859004850281018501909152818152928301828280156108f95780601f106108ce576101008083540402835291602001916108f9565b820191906000526020600020905b8154815290600101906020018083116108dc57829003601f168201915b505050505081526020019060010190610862565b5050505090509450945094509450509193509193565b600190565b6000816003541015801561093c5750600082115b6109585760405162461bcd60e51b81526004016105cc90612999565b6000828152600460205260409020600b81015460ff161561097d576002915050610aad565b80600701544311610992576000915050610aad565b806008015443116109a7576001915050610aad565b80600a015481600901541115806109c857506109c1610689565b8160090154105b156109d7576003915050610aad565b60028101546109ea576004915050610aad565b600b810154610100900460ff1615610a06576007915050610aad565b610a97816002015460008054906101000a90046001600160a01b03166001600160a01b031663c1a287e26040518163ffffffff1660e01b815260040160206040518083038186803b158015610a5a57600080fd5b505afa158015610a6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a9291906122ea565b611b08565b4210610aa7576006915050610aad565b60059150505b919050565b6000610abd82610928565b90506007816007811115610acd57fe5b1415610aeb5760405162461bcd60e51b81526004016105cc90612e33565b60008281526004602052604090206002546001600160a01b0316331480610bad5750610b15610ff9565b60018054838201546001600160a01b039182169263782d6fe19290911690610b3e904390611b34565b6040518363ffffffff1660e01b8152600401610b5b9291906125e1565b60206040518083038186803b158015610b7357600080fd5b505afa158015610b87573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bab91906122ea565b105b610bc95760405162461bcd60e51b81526004016105cc90612bff565b600b8101805460ff1916600117905560005b6003820154811015610cd5576000546003830180546001600160a01b039092169163591fcdfe919084908110610c0d57fe5b6000918252602090912001546004850180546001600160a01b039092169185908110610c3557fe5b9060005260206000200154856005018581548110610c4f57fe5b90600052602060002001866006018681548110610c6857fe5b9060005260206000200187600201546040518663ffffffff1660e01b8152600401610c979594939291906126da565b600060405180830381600087803b158015610cb157600080fd5b505af1158015610cc5573d6000803e3d6000fd5b505060019092019150610bdb9050565b507f789cf55be980739dad1d0699b93b58e806b51c9d96619bfa8fe0a28abaa7b30c83604051610d05919061276b565b60405180910390a1505050565b6002546001600160a01b031681565b6040805180820190915260178152765045414b4445464920476f7665726e6f7220416c70686160481b60209091015260007f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a8667f6130fd4c4c8efcb0fca663d630f6c5c894306c51e1be5421d0c4983baba77ecc610d9c611b5c565b30604051602001610db09493929190612774565b60405160208183030381529060405280519060200120905060007f8e25870c07e0b0b3884c78da52790939a455c275406c44ae8b434b692fb916ee8787604051602001610dff93929190612798565b60405160208183030381529060405280519060200120905060008282604051602001610e2c9291906125b2565b604051602081830303815290604052805190602001209050600060018288888860405160008152602001604052604051610e6994939291906127b0565b6020604051602081039080840390855afa158015610e8b573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610ebe5760405162461bcd60e51b81526004016105cc90612d61565b610ec9818a8a61196c565b505050505050505050565b6001546001600160a01b031681565b6002546001600160a01b03163314610f0d5760405162461bcd60e51b81526004016105cc90612f02565b600280546001600160a01b0319169055565b600a90565b6002546001600160a01b03163314610f4e5760405162461bcd60e51b81526004016105cc90612ab2565b600080546040516001600160a01b0390911691633a66f90191839190610f789087906020016125cd565b604051602081830303815290604052856040518563ffffffff1660e01b8152600401610fa794939291906125fa565b602060405180830381600087803b158015610fc157600080fd5b505af1158015610fd5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061068491906122ea565b66038d7ea4c6800090565b6002546001600160a01b0316331461102e5760405162461bcd60e51b81526004016105cc906127f5565b6000805460408051630e18b68160e01b815290516001600160a01b0390921692630e18b6819260048084019382900301818387803b15801561106f57600080fd5b505af1158015611083573d6000803e3d6000fd5b50505050565b6000546001600160a01b031681565b60035481565b60006110a8610ff9565b600180546001600160a01b03169063782d6fe19033906110c9904390611b34565b6040518363ffffffff1660e01b81526004016110e69291906125e1565b60206040518083038186803b1580156110fe57600080fd5b505afa158015611112573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061113691906122ea565b116111535760405162461bcd60e51b81526004016105cc90612d04565b84518651148015611165575083518651145b8015611172575082518651145b61118e5760405162461bcd60e51b81526004016105cc90612b95565b85516111ac5760405162461bcd60e51b81526004016105cc90612cb8565b6111b4610f1f565b865111156111d45760405162461bcd60e51b81526004016105cc90612b22565b3360009081526005602052604090205480156112515760006111f582610928565b9050600181600781111561120557fe5b14156112235760405162461bcd60e51b81526004016105cc90612db0565b600081600781111561123157fe5b141561124f5760405162461bcd60e51b81526004016105cc90612a2f565b505b600061125f43610a92610923565b9050600061126f82610a92610524565b6003805460010190559050611282611cbf565b604051806101a001604052806003548152602001336001600160a01b03168152602001600081526020018b81526020018a815260200189815260200188815260200184815260200183815260200160008152602001600081526020016000151581526020016000151581525090508060046000836000015181526020019081526020016000206000820151816000015560208201518160010160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550604082015181600201556060820151816003019080519060200190611365929190611d34565b5060808201518051611381916004840191602090910190611d99565b5060a0820151805161139d916005840191602090910190611de0565b5060c082015180516113b9916006840191602090910190611e39565b5060e082015181600701556101008201518160080155610120820151816009015561014082015181600a015561016082015181600b0160006101000a81548160ff02191690831515021790555061018082015181600b0160016101000a81548160ff02191690831515021790555090505080600001516005600083602001516001600160a01b03166001600160a01b03168152602001908152602001600020819055507f7d84a6263ae0d98d3329bd7b46bb4e8d6f98cd35a7adb45c274c8b7fd5ebd5e08160000151338c8c8c8c89898e60405161149f99989796959493929190612f7d565b60405180910390a1519998505050505050505050565b60046114c082610928565b60078111156114cb57fe5b146114e85760405162461bcd60e51b81526004016105cc90612852565b600081815260046020818152604080842084548251630d48571f60e31b8152925191959461153d9442946001600160a01b0390931693636a42b8f8938084019390829003018186803b158015610a5a57600080fd5b905060005b60038301548110156116e5576116dd83600301828154811061156057fe5b6000918252602090912001546004850180546001600160a01b03909216918490811061158857fe5b90600052602060002001548560050184815481106115a257fe5b600091825260209182902001805460408051601f60026000196101006001871615020190941693909304928301859004850281018501909152818152928301828280156116305780601f1061160557610100808354040283529160200191611630565b820191906000526020600020905b81548152906001019060200180831161161357829003601f168201915b505050505086600601858154811061164457fe5b600091825260209182902001805460408051601f60026000196101006001871615020190941693909304928301859004850281018501909152818152928301828280156116d25780601f106116a7576101008083540402835291602001916116d2565b820191906000526020600020905b8154815290600101906020018083116116b557829003601f168201915b505050505086611b60565b600101611542565b50600282018190556040517f9a2e42fd6722813d69113e7d0079d3d940171428df7373df9c7f7617cfda289290610d059085908490613061565b7f8e25870c07e0b0b3884c78da52790939a455c275406c44ae8b434b692fb916ee81565b61174b611e92565b5060008281526004602090815260408083206001600160a01b0385168452600c018252918290208251606081018452815460ff808216151583526101009091041615159281019290925260010154918101919091525b92915050565b60056117b282610928565b60078111156117bd57fe5b146117da5760405162461bcd60e51b81526004016105cc906128bc565b6000818152600460205260408120600b8101805461ff001916610100179055905b6003820154811015611930576000546004830180546001600160a01b0390921691630825f38f91908490811061182d57fe5b906000526020600020015484600301848154811061184757fe5b6000918252602090912001546004860180546001600160a01b03909216918690811061186f57fe5b906000526020600020015486600501868154811061188957fe5b906000526020600020018760060187815481106118a257fe5b9060005260206000200188600201546040518763ffffffff1660e01b81526004016118d19594939291906126da565b6000604051808303818588803b1580156118ea57600080fd5b505af11580156118fe573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f191682016040526119279190810190612302565b506001016117fb565b507f712ae1383f79ac853f8d882153778e0260ef8f03b504e2866e0593e04d2b291f82604051611960919061276b565b60405180910390a15050565b600161197783610928565b600781111561198257fe5b1461199f5760405162461bcd60e51b81526004016105cc90612e89565b60008281526004602090815260408083206001600160a01b0387168452600c8101909252909120805460ff16156119e85760405162461bcd60e51b81526004016105cc906129e2565b600154600783015460405163782d6fe160e01b81526000926001600160a01b03169163782d6fe191611a1e918a916004016125e1565b60206040518083038186803b158015611a3657600080fd5b505afa158015611a4a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a6e91906122ea565b90508315611a8e57611a84836009015482611b08565b6009840155611aa2565b611a9c83600a015482611b08565b600a8401555b8154600160ff19909116811761ff0019166101008615150217835582018190556040517f877856338e13f63d0c36822ff0ef736b80934cd90574a3a5bc9262c39d217c4690611af8908890889088908690612666565b60405180910390a1505050505050565b600082820183811015611b2d5760405162461bcd60e51b81526004016105cc90612b6a565b9392505050565b600082821115611b565760405162461bcd60e51b81526004016105cc90612ed3565b50900390565b4690565b6000546040516001600160a01b039091169063f2b0653790611b8e908890889088908890889060200161268e565b604051602081830303815290604052805190602001206040518263ffffffff1660e01b8152600401611bc0919061276b565b60206040518083038186803b158015611bd857600080fd5b505afa158015611bec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c1091906122ce565b15611c2d5760405162461bcd60e51b81526004016105cc90612c4e565b600054604051633a66f90160e01b81526001600160a01b0390911690633a66f90190611c65908890889088908890889060040161268e565b602060405180830381600087803b158015611c7f57600080fd5b505af1158015611c93573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cb791906122ea565b505050505050565b604051806101a001604052806000815260200160006001600160a01b031681526020016000815260200160608152602001606081526020016060815260200160608152602001600081526020016000815260200160008152602001600081526020016000151581526020016000151581525090565b828054828255906000526020600020908101928215611d89579160200282015b82811115611d8957825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190611d54565b50611d95929150611eb2565b5090565b828054828255906000526020600020908101928215611dd4579160200282015b82811115611dd4578251825591602001919060010190611db9565b50611d95929150611ed1565b828054828255906000526020600020908101928215611e2d579160200282015b82811115611e2d5782518051611e1d918491602090910190611ee6565b5091602001919060010190611e00565b50611d95929150611f53565b828054828255906000526020600020908101928215611e86579160200282015b82811115611e865782518051611e76918491602090910190611ee6565b5091602001919060010190611e59565b50611d95929150611f70565b604080516060810182526000808252602082018190529181019190915290565b5b80821115611d955780546001600160a01b0319168155600101611eb3565b5b80821115611d955760008155600101611ed2565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10611f2757805160ff1916838001178555611dd4565b82800160010185558215611dd45791820182811115611dd4578251825591602001919060010190611db9565b80821115611d95576000611f678282611f8d565b50600101611f53565b80821115611d95576000611f848282611f8d565b50600101611f70565b50805460018160011615610100020316600290046000825580601f10611fb35750611fd1565b601f016020900490600052602060002090810190611fd19190611ed1565b50565b80356001600160a01b03811681146117a157600080fd5b600082601f830112611ffb578081fd5b813561200e61200982613096565b61306f565b81815291506020808301908481018184028601820187101561202f57600080fd5b60005b84811015612056576120448883611fd4565b84529282019290820190600101612032565b505050505092915050565b600082601f830112612071578081fd5b813561207f61200982613096565b818152915060208083019084810160005b84811015612056576120a7888484358a010161216f565b84529282019290820190600101612090565b600082601f8301126120c9578081fd5b81356120d761200982613096565b818152915060208083019084810160005b84811015612056576120ff888484358a010161216f565b845292820192908201906001016120e8565b600082601f830112612121578081fd5b813561212f61200982613096565b81815291506020808301908481018184028601820187101561215057600080fd5b60005b8481101561205657813584529282019290820190600101612153565b600082601f83011261217f578081fd5b813561218d612009826130b6565b91508082528360208285010111156121a457600080fd5b8060208401602084013760009082016020015292915050565b6000602082840312156121ce578081fd5b611b2d8383611fd4565b600080604083850312156121ea578081fd5b6121f48484611fd4565b946020939093013593505050565b600080600080600060a08688031215612219578081fd5b853567ffffffffffffffff80821115612230578283fd5b61223c89838a01611feb565b96506020880135915080821115612251578283fd5b61225d89838a01612111565b95506040880135915080821115612272578283fd5b61227e89838a016120b9565b94506060880135915080821115612293578283fd5b61229f89838a01612061565b935060808801359150808211156122b4578283fd5b506122c18882890161216f565b9150509295509295909350565b6000602082840312156122df578081fd5b8151611b2d81613112565b6000602082840312156122fb578081fd5b5051919050565b600060208284031215612313578081fd5b815167ffffffffffffffff811115612329578182fd5b8201601f81018413612339578182fd5b8051612347612009826130b6565b81815285602083850101111561235b578384fd5b61236c8260208301602086016130e6565b95945050505050565b600060208284031215612386578081fd5b5035919050565b6000806040838503121561239f578182fd5b823591506123b08460208501611fd4565b90509250929050565b600080604083850312156123cb578182fd5b8235915060208301356123dd81613112565b809150509250929050565b600080600080600060a086880312156123ff578283fd5b85359450602086013561241181613112565b9350604086013560ff81168114612426578384fd5b94979396509394606081013594506080013592915050565b6000815180845260208085019450808401835b838110156124765781516001600160a01b031687529582019590820190600101612451565b509495945050505050565b6000815180845260208085018081965082840281019150828601855b858110156124c75782840389526124b5848351612503565b9885019893509084019060010161249d565b5091979650505050505050565b6000815180845260208085019450808401835b83811015612476578151875295820195908201906001016124e7565b6000815180845261251b8160208601602086016130e6565b601f01601f19169290920160200192915050565b6000815460018082166000811461254d576001811461256b576125a9565b60028304607f16865260ff19831660208701526040860193506125a9565b6002830480875261257b866130da565b60005b8281101561259f5781546020828b010152848201915060208101905061257e565b8801602001955050505b50505092915050565b61190160f01b81526002810192909252602282015260420190565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b600060018060a01b038616825284602083015260a06040830152601860a08301527f73657450656e64696e6741646d696e286164647265737329000000000000000060c083015260e0606083015261265560e0830185612503565b905082608083015295945050505050565b6001600160a01b03949094168452602084019290925215156040830152606082015260800190565b600060018060a01b038716825285602083015260a060408301526126b560a0830186612503565b82810360608401526126c78186612503565b9150508260808301529695505050505050565b600060018060a01b038716825285602083015260a0604083015261270160a083018661252f565b82810360608401526126c7818661252f565b600060808252612726608083018761243e565b828103602084015261273881876124d4565b9050828103604084015261274c8186612481565b905082810360608401526127608185612481565b979650505050505050565b90815260200190565b938452602084019290925260408301526001600160a01b0316606082015260800190565b92835260208301919091521515604082015260600190565b93845260ff9290921660208401526040830152606082015260800190565b60208101600883106127dc57fe5b91905290565b600060208252611b2d6020830184612503565b60208082526039908201527f476f7665726e6f72416c7068613a3a5f5f61636365707441646d696e3a20736560408201527f6e646572206d75737420626520676f7620677561726469616e00000000000000606082015260800190565b60208082526044908201527f476f7665726e6f72416c7068613a3a71756575653a2070726f706f73616c206360408201527f616e206f6e6c79206265207175657565642069662069742069732073756363656060820152631959195960e21b608082015260a00190565b60208082526045908201527f476f7665726e6f72416c7068613a3a657865637574653a2070726f706f73616c60408201527f2063616e206f6e6c7920626520657865637574656420696620697420697320716060820152641d595d595960da1b608082015260a00190565b6020808252604c908201527f476f7665726e6f72416c7068613a3a5f5f6578656375746553657454696d656c60408201527f6f636b50656e64696e6741646d696e3a2073656e646572206d7573742062652060608201526b33b7bb1033bab0b93234b0b760a11b608082015260a00190565b60208082526029908201527f476f7665726e6f72416c7068613a3a73746174653a20696e76616c69642070726040820152681bdc1bdcd85b081a5960ba1b606082015260800190565b6020808252602d908201527f476f7665726e6f72416c7068613a3a5f63617374566f74653a20766f7465722060408201526c185b1c9958591e481d9bdd1959609a1b606082015260800190565b60208082526059908201527f476f7665726e6f72416c7068613a3a70726f706f73653a206f6e65206c69766560408201527f2070726f706f73616c207065722070726f706f7365722c20666f756e6420616e60608201527f20616c72656164792070656e64696e672070726f706f73616c00000000000000608082015260a00190565b6020808252604a908201527f476f7665726e6f72416c7068613a3a5f5f717565756553657454696d656c6f6360408201527f6b50656e64696e6741646d696e3a2073656e646572206d75737420626520676f6060820152693b1033bab0b93234b0b760b11b608082015260a00190565b60208082526028908201527f476f7665726e6f72416c7068613a3a70726f706f73653a20746f6f206d616e7960408201526720616374696f6e7360c01b606082015260800190565b6020808252601190820152706164646974696f6e206f766572666c6f7760781b604082015260600190565b60208082526044908201527f476f7665726e6f72416c7068613a3a70726f706f73653a2070726f706f73616c60408201527f2066756e6374696f6e20696e666f726d6174696f6e206172697479206d69736d6060820152630c2e8c6d60e31b608082015260a00190565b6020808252602f908201527f476f7665726e6f72416c7068613a3a63616e63656c3a2070726f706f7365722060408201526e18589bdd99481d1a1c995cda1bdb19608a1b606082015260800190565b60208082526044908201527f476f7665726e6f72416c7068613a3a5f71756575654f725265766572743a207060408201527f726f706f73616c20616374696f6e20616c7265616479207175657565642061746060820152632065746160e01b608082015260a00190565b6020808252602c908201527f476f7665726e6f72416c7068613a3a70726f706f73653a206d7573742070726f60408201526b7669646520616374696f6e7360a01b606082015260800190565b6020808252603f908201527f476f7665726e6f72416c7068613a3a70726f706f73653a2070726f706f73657260408201527f20766f7465732062656c6f772070726f706f73616c207468726573686f6c6400606082015260800190565b6020808252602f908201527f476f7665726e6f72416c7068613a3a63617374566f746542795369673a20696e60408201526e76616c6964207369676e617475726560881b606082015260800190565b60208082526058908201527f476f7665726e6f72416c7068613a3a70726f706f73653a206f6e65206c69766560408201527f2070726f706f73616c207065722070726f706f7365722c20666f756e6420616e60608201527f20616c7265616479206163746976652070726f706f73616c0000000000000000608082015260a00190565b60208082526036908201527f476f7665726e6f72416c7068613a3a63616e63656c3a2063616e6e6f742063616040820152751b98d95b08195e1958dd5d1959081c1c9bdc1bdcd85b60521b606082015260800190565b6020808252602a908201527f476f7665726e6f72416c7068613a3a5f63617374566f74653a20766f74696e67604082015269081a5cc818db1bdcd95960b21b606082015260800190565b6020808252601590820152747375627472616374696f6e20756e646572666c6f7760581b604082015260600190565b60208082526036908201527f476f7665726e6f72416c7068613a3a5f5f61626469636174653a2073656e6465604082015275391036bab9ba1031329033b7bb1033bab0b93234b0b760511b606082015260800190565b8151151581526020808301511515908201526040918201519181019190915260600190565b8981526001600160a01b038916602082015261012060408201819052600090612fa88382018b61243e565b90508281036060840152612fbc818a6124d4565b90508281036080840152612fd08189612481565b905082810360a0840152612fe48188612481565b90508560c08401528460e08401528281036101008401526130058185612503565b9c9b505050505050505050505050565b9889526001600160a01b0397909716602089015260408801959095526060870193909352608086019190915260a085015260c0840152151560e083015215156101008201526101200190565b918252602082015260400190565b60405181810167ffffffffffffffff8111828210171561308e57600080fd5b604052919050565b600067ffffffffffffffff8211156130ac578081fd5b5060209081020190565b600067ffffffffffffffff8211156130cc578081fd5b50601f01601f191660200190565b60009081526020902090565b60005b838110156131015781810151838201526020016130e9565b838111156110835750506000910152565b8015158114611fd157600080fdfea164736f6c634300060c000a0000000000000000000000005a88bcfe2ab1a5cf720438cf605314e8ed2380d3000000000000000000000000630d98424efe0ea27fb1b3ab7741907dffeaad78000000000000000000000000bdbdfafb975b35a41fa228585c8700d31cce73c9
Deployed Bytecode
0x60806040526004361061019c5760003560e01c80634634c61f116100ec578063d33219b41161008a578063ddf0b00911610064578063ddf0b00914610456578063deaaa7cc14610476578063e23a9a521461048b578063fe0d94c1146104b85761019c565b8063d33219b41461040c578063da35c66414610421578063da95691a146104365761019c565b80637bdbe4d0116100c65780637bdbe4d0146103ad57806391500671146103c2578063b58131b0146103e2578063b9a61961146103f75761019c565b80634634c61f146103635780635c07b6ea14610383578063760fbc13146103985761019c565b806321f43e42116101595780633932abb1116101335780633932abb1146102df5780633e4f49e6146102f457806340e58ee514610321578063452a9320146103415761019c565b806321f43e421461027a57806324bc1a641461029a578063328dd982146102af5761019c565b8063013cf08b146101a157806302a251a3146101df57806306fdde031461020157806315373e3d1461022357806317977c611461024557806320606b7014610265575b600080fd5b3480156101ad57600080fd5b506101c16101bc366004612375565b6104cb565b6040516101d699989796959493929190613015565b60405180910390f35b3480156101eb57600080fd5b506101f4610524565b6040516101d6919061276b565b34801561020d57600080fd5b5061021661052a565b6040516101d691906127e2565b34801561022f57600080fd5b5061024361023e3660046123b9565b61055d565b005b34801561025157600080fd5b506101f46102603660046121bd565b61056c565b34801561027157600080fd5b506101f461057e565b34801561028657600080fd5b506102436102953660046121d8565b6105a2565b3480156102a657600080fd5b506101f4610689565b3480156102bb57600080fd5b506102cf6102ca366004612375565b610694565b6040516101d69493929190612713565b3480156102eb57600080fd5b506101f4610923565b34801561030057600080fd5b5061031461030f366004612375565b610928565b6040516101d691906127ce565b34801561032d57600080fd5b5061024361033c366004612375565b610ab2565b34801561034d57600080fd5b50610356610d12565b6040516101d691906125cd565b34801561036f57600080fd5b5061024361037e3660046123e8565b610d21565b34801561038f57600080fd5b50610356610ed4565b3480156103a457600080fd5b50610243610ee3565b3480156103b957600080fd5b506101f4610f1f565b3480156103ce57600080fd5b506102436103dd3660046121d8565b610f24565b3480156103ee57600080fd5b506101f4610ff9565b34801561040357600080fd5b50610243611004565b34801561041857600080fd5b50610356611089565b34801561042d57600080fd5b506101f4611098565b34801561044257600080fd5b506101f4610451366004612202565b61109e565b34801561046257600080fd5b50610243610471366004612375565b6114b5565b34801561048257600080fd5b506101f461171f565b34801561049757600080fd5b506104ab6104a636600461238d565b611743565b6040516101d69190612f58565b6102436104c6366004612375565b6117a7565b6004602052600090815260409020805460018201546002830154600784015460088501546009860154600a870154600b9097015495966001600160a01b0390951695939492939192909160ff8082169161010090041689565b619d8090565b604051806040016040528060178152602001765045414b4445464920476f7665726e6f7220416c70686160481b81525081565b61056833838361196c565b5050565b60056020526000908152604090205481565b7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b6002546001600160a01b031633146105d55760405162461bcd60e51b81526004016105cc90612927565b60405180910390fd5b600080546040516001600160a01b0390911691630825f38f918391906105ff9087906020016125cd565b604051602081830303815290604052856040518563ffffffff1660e01b815260040161062e94939291906125fa565b600060405180830381600087803b15801561064857600080fd5b505af115801561065c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526106849190810190612302565b505050565b660e35fa931a000090565b6060806060806000600460008781526020019081526020016000209050806003018160040182600501836006018380548060200260200160405190810160405280929190818152602001828054801561071657602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116106f8575b505050505093508280548060200260200160405190810160405280929190818152602001828054801561076857602002820191906000526020600020905b815481526020019060010190808311610754575b5050505050925081805480602002602001604051908101604052809291908181526020016000905b8282101561083b5760008481526020908190208301805460408051601f60026000196101006001871615020190941693909304928301859004850281018501909152818152928301828280156108275780601f106107fc57610100808354040283529160200191610827565b820191906000526020600020905b81548152906001019060200180831161080a57829003601f168201915b505050505081526020019060010190610790565b50505050915080805480602002602001604051908101604052809291908181526020016000905b8282101561090d5760008481526020908190208301805460408051601f60026000196101006001871615020190941693909304928301859004850281018501909152818152928301828280156108f95780601f106108ce576101008083540402835291602001916108f9565b820191906000526020600020905b8154815290600101906020018083116108dc57829003601f168201915b505050505081526020019060010190610862565b5050505090509450945094509450509193509193565b600190565b6000816003541015801561093c5750600082115b6109585760405162461bcd60e51b81526004016105cc90612999565b6000828152600460205260409020600b81015460ff161561097d576002915050610aad565b80600701544311610992576000915050610aad565b806008015443116109a7576001915050610aad565b80600a015481600901541115806109c857506109c1610689565b8160090154105b156109d7576003915050610aad565b60028101546109ea576004915050610aad565b600b810154610100900460ff1615610a06576007915050610aad565b610a97816002015460008054906101000a90046001600160a01b03166001600160a01b031663c1a287e26040518163ffffffff1660e01b815260040160206040518083038186803b158015610a5a57600080fd5b505afa158015610a6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a9291906122ea565b611b08565b4210610aa7576006915050610aad565b60059150505b919050565b6000610abd82610928565b90506007816007811115610acd57fe5b1415610aeb5760405162461bcd60e51b81526004016105cc90612e33565b60008281526004602052604090206002546001600160a01b0316331480610bad5750610b15610ff9565b60018054838201546001600160a01b039182169263782d6fe19290911690610b3e904390611b34565b6040518363ffffffff1660e01b8152600401610b5b9291906125e1565b60206040518083038186803b158015610b7357600080fd5b505afa158015610b87573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bab91906122ea565b105b610bc95760405162461bcd60e51b81526004016105cc90612bff565b600b8101805460ff1916600117905560005b6003820154811015610cd5576000546003830180546001600160a01b039092169163591fcdfe919084908110610c0d57fe5b6000918252602090912001546004850180546001600160a01b039092169185908110610c3557fe5b9060005260206000200154856005018581548110610c4f57fe5b90600052602060002001866006018681548110610c6857fe5b9060005260206000200187600201546040518663ffffffff1660e01b8152600401610c979594939291906126da565b600060405180830381600087803b158015610cb157600080fd5b505af1158015610cc5573d6000803e3d6000fd5b505060019092019150610bdb9050565b507f789cf55be980739dad1d0699b93b58e806b51c9d96619bfa8fe0a28abaa7b30c83604051610d05919061276b565b60405180910390a1505050565b6002546001600160a01b031681565b6040805180820190915260178152765045414b4445464920476f7665726e6f7220416c70686160481b60209091015260007f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a8667f6130fd4c4c8efcb0fca663d630f6c5c894306c51e1be5421d0c4983baba77ecc610d9c611b5c565b30604051602001610db09493929190612774565b60405160208183030381529060405280519060200120905060007f8e25870c07e0b0b3884c78da52790939a455c275406c44ae8b434b692fb916ee8787604051602001610dff93929190612798565b60405160208183030381529060405280519060200120905060008282604051602001610e2c9291906125b2565b604051602081830303815290604052805190602001209050600060018288888860405160008152602001604052604051610e6994939291906127b0565b6020604051602081039080840390855afa158015610e8b573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610ebe5760405162461bcd60e51b81526004016105cc90612d61565b610ec9818a8a61196c565b505050505050505050565b6001546001600160a01b031681565b6002546001600160a01b03163314610f0d5760405162461bcd60e51b81526004016105cc90612f02565b600280546001600160a01b0319169055565b600a90565b6002546001600160a01b03163314610f4e5760405162461bcd60e51b81526004016105cc90612ab2565b600080546040516001600160a01b0390911691633a66f90191839190610f789087906020016125cd565b604051602081830303815290604052856040518563ffffffff1660e01b8152600401610fa794939291906125fa565b602060405180830381600087803b158015610fc157600080fd5b505af1158015610fd5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061068491906122ea565b66038d7ea4c6800090565b6002546001600160a01b0316331461102e5760405162461bcd60e51b81526004016105cc906127f5565b6000805460408051630e18b68160e01b815290516001600160a01b0390921692630e18b6819260048084019382900301818387803b15801561106f57600080fd5b505af1158015611083573d6000803e3d6000fd5b50505050565b6000546001600160a01b031681565b60035481565b60006110a8610ff9565b600180546001600160a01b03169063782d6fe19033906110c9904390611b34565b6040518363ffffffff1660e01b81526004016110e69291906125e1565b60206040518083038186803b1580156110fe57600080fd5b505afa158015611112573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061113691906122ea565b116111535760405162461bcd60e51b81526004016105cc90612d04565b84518651148015611165575083518651145b8015611172575082518651145b61118e5760405162461bcd60e51b81526004016105cc90612b95565b85516111ac5760405162461bcd60e51b81526004016105cc90612cb8565b6111b4610f1f565b865111156111d45760405162461bcd60e51b81526004016105cc90612b22565b3360009081526005602052604090205480156112515760006111f582610928565b9050600181600781111561120557fe5b14156112235760405162461bcd60e51b81526004016105cc90612db0565b600081600781111561123157fe5b141561124f5760405162461bcd60e51b81526004016105cc90612a2f565b505b600061125f43610a92610923565b9050600061126f82610a92610524565b6003805460010190559050611282611cbf565b604051806101a001604052806003548152602001336001600160a01b03168152602001600081526020018b81526020018a815260200189815260200188815260200184815260200183815260200160008152602001600081526020016000151581526020016000151581525090508060046000836000015181526020019081526020016000206000820151816000015560208201518160010160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550604082015181600201556060820151816003019080519060200190611365929190611d34565b5060808201518051611381916004840191602090910190611d99565b5060a0820151805161139d916005840191602090910190611de0565b5060c082015180516113b9916006840191602090910190611e39565b5060e082015181600701556101008201518160080155610120820151816009015561014082015181600a015561016082015181600b0160006101000a81548160ff02191690831515021790555061018082015181600b0160016101000a81548160ff02191690831515021790555090505080600001516005600083602001516001600160a01b03166001600160a01b03168152602001908152602001600020819055507f7d84a6263ae0d98d3329bd7b46bb4e8d6f98cd35a7adb45c274c8b7fd5ebd5e08160000151338c8c8c8c89898e60405161149f99989796959493929190612f7d565b60405180910390a1519998505050505050505050565b60046114c082610928565b60078111156114cb57fe5b146114e85760405162461bcd60e51b81526004016105cc90612852565b600081815260046020818152604080842084548251630d48571f60e31b8152925191959461153d9442946001600160a01b0390931693636a42b8f8938084019390829003018186803b158015610a5a57600080fd5b905060005b60038301548110156116e5576116dd83600301828154811061156057fe5b6000918252602090912001546004850180546001600160a01b03909216918490811061158857fe5b90600052602060002001548560050184815481106115a257fe5b600091825260209182902001805460408051601f60026000196101006001871615020190941693909304928301859004850281018501909152818152928301828280156116305780601f1061160557610100808354040283529160200191611630565b820191906000526020600020905b81548152906001019060200180831161161357829003601f168201915b505050505086600601858154811061164457fe5b600091825260209182902001805460408051601f60026000196101006001871615020190941693909304928301859004850281018501909152818152928301828280156116d25780601f106116a7576101008083540402835291602001916116d2565b820191906000526020600020905b8154815290600101906020018083116116b557829003601f168201915b505050505086611b60565b600101611542565b50600282018190556040517f9a2e42fd6722813d69113e7d0079d3d940171428df7373df9c7f7617cfda289290610d059085908490613061565b7f8e25870c07e0b0b3884c78da52790939a455c275406c44ae8b434b692fb916ee81565b61174b611e92565b5060008281526004602090815260408083206001600160a01b0385168452600c018252918290208251606081018452815460ff808216151583526101009091041615159281019290925260010154918101919091525b92915050565b60056117b282610928565b60078111156117bd57fe5b146117da5760405162461bcd60e51b81526004016105cc906128bc565b6000818152600460205260408120600b8101805461ff001916610100179055905b6003820154811015611930576000546004830180546001600160a01b0390921691630825f38f91908490811061182d57fe5b906000526020600020015484600301848154811061184757fe5b6000918252602090912001546004860180546001600160a01b03909216918690811061186f57fe5b906000526020600020015486600501868154811061188957fe5b906000526020600020018760060187815481106118a257fe5b9060005260206000200188600201546040518763ffffffff1660e01b81526004016118d19594939291906126da565b6000604051808303818588803b1580156118ea57600080fd5b505af11580156118fe573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f191682016040526119279190810190612302565b506001016117fb565b507f712ae1383f79ac853f8d882153778e0260ef8f03b504e2866e0593e04d2b291f82604051611960919061276b565b60405180910390a15050565b600161197783610928565b600781111561198257fe5b1461199f5760405162461bcd60e51b81526004016105cc90612e89565b60008281526004602090815260408083206001600160a01b0387168452600c8101909252909120805460ff16156119e85760405162461bcd60e51b81526004016105cc906129e2565b600154600783015460405163782d6fe160e01b81526000926001600160a01b03169163782d6fe191611a1e918a916004016125e1565b60206040518083038186803b158015611a3657600080fd5b505afa158015611a4a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a6e91906122ea565b90508315611a8e57611a84836009015482611b08565b6009840155611aa2565b611a9c83600a015482611b08565b600a8401555b8154600160ff19909116811761ff0019166101008615150217835582018190556040517f877856338e13f63d0c36822ff0ef736b80934cd90574a3a5bc9262c39d217c4690611af8908890889088908690612666565b60405180910390a1505050505050565b600082820183811015611b2d5760405162461bcd60e51b81526004016105cc90612b6a565b9392505050565b600082821115611b565760405162461bcd60e51b81526004016105cc90612ed3565b50900390565b4690565b6000546040516001600160a01b039091169063f2b0653790611b8e908890889088908890889060200161268e565b604051602081830303815290604052805190602001206040518263ffffffff1660e01b8152600401611bc0919061276b565b60206040518083038186803b158015611bd857600080fd5b505afa158015611bec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c1091906122ce565b15611c2d5760405162461bcd60e51b81526004016105cc90612c4e565b600054604051633a66f90160e01b81526001600160a01b0390911690633a66f90190611c65908890889088908890889060040161268e565b602060405180830381600087803b158015611c7f57600080fd5b505af1158015611c93573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cb791906122ea565b505050505050565b604051806101a001604052806000815260200160006001600160a01b031681526020016000815260200160608152602001606081526020016060815260200160608152602001600081526020016000815260200160008152602001600081526020016000151581526020016000151581525090565b828054828255906000526020600020908101928215611d89579160200282015b82811115611d8957825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190611d54565b50611d95929150611eb2565b5090565b828054828255906000526020600020908101928215611dd4579160200282015b82811115611dd4578251825591602001919060010190611db9565b50611d95929150611ed1565b828054828255906000526020600020908101928215611e2d579160200282015b82811115611e2d5782518051611e1d918491602090910190611ee6565b5091602001919060010190611e00565b50611d95929150611f53565b828054828255906000526020600020908101928215611e86579160200282015b82811115611e865782518051611e76918491602090910190611ee6565b5091602001919060010190611e59565b50611d95929150611f70565b604080516060810182526000808252602082018190529181019190915290565b5b80821115611d955780546001600160a01b0319168155600101611eb3565b5b80821115611d955760008155600101611ed2565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10611f2757805160ff1916838001178555611dd4565b82800160010185558215611dd45791820182811115611dd4578251825591602001919060010190611db9565b80821115611d95576000611f678282611f8d565b50600101611f53565b80821115611d95576000611f848282611f8d565b50600101611f70565b50805460018160011615610100020316600290046000825580601f10611fb35750611fd1565b601f016020900490600052602060002090810190611fd19190611ed1565b50565b80356001600160a01b03811681146117a157600080fd5b600082601f830112611ffb578081fd5b813561200e61200982613096565b61306f565b81815291506020808301908481018184028601820187101561202f57600080fd5b60005b84811015612056576120448883611fd4565b84529282019290820190600101612032565b505050505092915050565b600082601f830112612071578081fd5b813561207f61200982613096565b818152915060208083019084810160005b84811015612056576120a7888484358a010161216f565b84529282019290820190600101612090565b600082601f8301126120c9578081fd5b81356120d761200982613096565b818152915060208083019084810160005b84811015612056576120ff888484358a010161216f565b845292820192908201906001016120e8565b600082601f830112612121578081fd5b813561212f61200982613096565b81815291506020808301908481018184028601820187101561215057600080fd5b60005b8481101561205657813584529282019290820190600101612153565b600082601f83011261217f578081fd5b813561218d612009826130b6565b91508082528360208285010111156121a457600080fd5b8060208401602084013760009082016020015292915050565b6000602082840312156121ce578081fd5b611b2d8383611fd4565b600080604083850312156121ea578081fd5b6121f48484611fd4565b946020939093013593505050565b600080600080600060a08688031215612219578081fd5b853567ffffffffffffffff80821115612230578283fd5b61223c89838a01611feb565b96506020880135915080821115612251578283fd5b61225d89838a01612111565b95506040880135915080821115612272578283fd5b61227e89838a016120b9565b94506060880135915080821115612293578283fd5b61229f89838a01612061565b935060808801359150808211156122b4578283fd5b506122c18882890161216f565b9150509295509295909350565b6000602082840312156122df578081fd5b8151611b2d81613112565b6000602082840312156122fb578081fd5b5051919050565b600060208284031215612313578081fd5b815167ffffffffffffffff811115612329578182fd5b8201601f81018413612339578182fd5b8051612347612009826130b6565b81815285602083850101111561235b578384fd5b61236c8260208301602086016130e6565b95945050505050565b600060208284031215612386578081fd5b5035919050565b6000806040838503121561239f578182fd5b823591506123b08460208501611fd4565b90509250929050565b600080604083850312156123cb578182fd5b8235915060208301356123dd81613112565b809150509250929050565b600080600080600060a086880312156123ff578283fd5b85359450602086013561241181613112565b9350604086013560ff81168114612426578384fd5b94979396509394606081013594506080013592915050565b6000815180845260208085019450808401835b838110156124765781516001600160a01b031687529582019590820190600101612451565b509495945050505050565b6000815180845260208085018081965082840281019150828601855b858110156124c75782840389526124b5848351612503565b9885019893509084019060010161249d565b5091979650505050505050565b6000815180845260208085019450808401835b83811015612476578151875295820195908201906001016124e7565b6000815180845261251b8160208601602086016130e6565b601f01601f19169290920160200192915050565b6000815460018082166000811461254d576001811461256b576125a9565b60028304607f16865260ff19831660208701526040860193506125a9565b6002830480875261257b866130da565b60005b8281101561259f5781546020828b010152848201915060208101905061257e565b8801602001955050505b50505092915050565b61190160f01b81526002810192909252602282015260420190565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b600060018060a01b038616825284602083015260a06040830152601860a08301527f73657450656e64696e6741646d696e286164647265737329000000000000000060c083015260e0606083015261265560e0830185612503565b905082608083015295945050505050565b6001600160a01b03949094168452602084019290925215156040830152606082015260800190565b600060018060a01b038716825285602083015260a060408301526126b560a0830186612503565b82810360608401526126c78186612503565b9150508260808301529695505050505050565b600060018060a01b038716825285602083015260a0604083015261270160a083018661252f565b82810360608401526126c7818661252f565b600060808252612726608083018761243e565b828103602084015261273881876124d4565b9050828103604084015261274c8186612481565b905082810360608401526127608185612481565b979650505050505050565b90815260200190565b938452602084019290925260408301526001600160a01b0316606082015260800190565b92835260208301919091521515604082015260600190565b93845260ff9290921660208401526040830152606082015260800190565b60208101600883106127dc57fe5b91905290565b600060208252611b2d6020830184612503565b60208082526039908201527f476f7665726e6f72416c7068613a3a5f5f61636365707441646d696e3a20736560408201527f6e646572206d75737420626520676f7620677561726469616e00000000000000606082015260800190565b60208082526044908201527f476f7665726e6f72416c7068613a3a71756575653a2070726f706f73616c206360408201527f616e206f6e6c79206265207175657565642069662069742069732073756363656060820152631959195960e21b608082015260a00190565b60208082526045908201527f476f7665726e6f72416c7068613a3a657865637574653a2070726f706f73616c60408201527f2063616e206f6e6c7920626520657865637574656420696620697420697320716060820152641d595d595960da1b608082015260a00190565b6020808252604c908201527f476f7665726e6f72416c7068613a3a5f5f6578656375746553657454696d656c60408201527f6f636b50656e64696e6741646d696e3a2073656e646572206d7573742062652060608201526b33b7bb1033bab0b93234b0b760a11b608082015260a00190565b60208082526029908201527f476f7665726e6f72416c7068613a3a73746174653a20696e76616c69642070726040820152681bdc1bdcd85b081a5960ba1b606082015260800190565b6020808252602d908201527f476f7665726e6f72416c7068613a3a5f63617374566f74653a20766f7465722060408201526c185b1c9958591e481d9bdd1959609a1b606082015260800190565b60208082526059908201527f476f7665726e6f72416c7068613a3a70726f706f73653a206f6e65206c69766560408201527f2070726f706f73616c207065722070726f706f7365722c20666f756e6420616e60608201527f20616c72656164792070656e64696e672070726f706f73616c00000000000000608082015260a00190565b6020808252604a908201527f476f7665726e6f72416c7068613a3a5f5f717565756553657454696d656c6f6360408201527f6b50656e64696e6741646d696e3a2073656e646572206d75737420626520676f6060820152693b1033bab0b93234b0b760b11b608082015260a00190565b60208082526028908201527f476f7665726e6f72416c7068613a3a70726f706f73653a20746f6f206d616e7960408201526720616374696f6e7360c01b606082015260800190565b6020808252601190820152706164646974696f6e206f766572666c6f7760781b604082015260600190565b60208082526044908201527f476f7665726e6f72416c7068613a3a70726f706f73653a2070726f706f73616c60408201527f2066756e6374696f6e20696e666f726d6174696f6e206172697479206d69736d6060820152630c2e8c6d60e31b608082015260a00190565b6020808252602f908201527f476f7665726e6f72416c7068613a3a63616e63656c3a2070726f706f7365722060408201526e18589bdd99481d1a1c995cda1bdb19608a1b606082015260800190565b60208082526044908201527f476f7665726e6f72416c7068613a3a5f71756575654f725265766572743a207060408201527f726f706f73616c20616374696f6e20616c7265616479207175657565642061746060820152632065746160e01b608082015260a00190565b6020808252602c908201527f476f7665726e6f72416c7068613a3a70726f706f73653a206d7573742070726f60408201526b7669646520616374696f6e7360a01b606082015260800190565b6020808252603f908201527f476f7665726e6f72416c7068613a3a70726f706f73653a2070726f706f73657260408201527f20766f7465732062656c6f772070726f706f73616c207468726573686f6c6400606082015260800190565b6020808252602f908201527f476f7665726e6f72416c7068613a3a63617374566f746542795369673a20696e60408201526e76616c6964207369676e617475726560881b606082015260800190565b60208082526058908201527f476f7665726e6f72416c7068613a3a70726f706f73653a206f6e65206c69766560408201527f2070726f706f73616c207065722070726f706f7365722c20666f756e6420616e60608201527f20616c7265616479206163746976652070726f706f73616c0000000000000000608082015260a00190565b60208082526036908201527f476f7665726e6f72416c7068613a3a63616e63656c3a2063616e6e6f742063616040820152751b98d95b08195e1958dd5d1959081c1c9bdc1bdcd85b60521b606082015260800190565b6020808252602a908201527f476f7665726e6f72416c7068613a3a5f63617374566f74653a20766f74696e67604082015269081a5cc818db1bdcd95960b21b606082015260800190565b6020808252601590820152747375627472616374696f6e20756e646572666c6f7760581b604082015260600190565b60208082526036908201527f476f7665726e6f72416c7068613a3a5f5f61626469636174653a2073656e6465604082015275391036bab9ba1031329033b7bb1033bab0b93234b0b760511b606082015260800190565b8151151581526020808301511515908201526040918201519181019190915260600190565b8981526001600160a01b038916602082015261012060408201819052600090612fa88382018b61243e565b90508281036060840152612fbc818a6124d4565b90508281036080840152612fd08189612481565b905082810360a0840152612fe48188612481565b90508560c08401528460e08401528281036101008401526130058185612503565b9c9b505050505050505050505050565b9889526001600160a01b0397909716602089015260408801959095526060870193909352608086019190915260a085015260c0840152151560e083015215156101008201526101200190565b918252602082015260400190565b60405181810167ffffffffffffffff8111828210171561308e57600080fd5b604052919050565b600067ffffffffffffffff8211156130ac578081fd5b5060209081020190565b600067ffffffffffffffff8211156130cc578081fd5b50601f01601f191660200190565b60009081526020902090565b60005b838110156131015781810151838201526020016130e9565b838111156110835750506000910152565b8015158114611fd157600080fdfea164736f6c634300060c000a
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000005a88bcfe2ab1a5cf720438cf605314e8ed2380d3000000000000000000000000630d98424efe0ea27fb1b3ab7741907dffeaad78000000000000000000000000bdbdfafb975b35a41fa228585c8700d31cce73c9
-----Decoded View---------------
Arg [0] : timelock_ (address): 0x5A88Bcfe2aB1a5cF720438cF605314E8ed2380d3
Arg [1] : peak_ (address): 0x630d98424eFe0Ea27fB1b3Ab7741907DFFEaAd78
Arg [2] : guardian_ (address): 0xbDBdfAfB975B35a41fA228585c8700D31cCE73c9
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000005a88bcfe2ab1a5cf720438cf605314e8ed2380d3
Arg [1] : 000000000000000000000000630d98424efe0ea27fb1b3ab7741907dffeaad78
Arg [2] : 000000000000000000000000bdbdfafb975b35a41fa228585c8700d31cce73c9
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 34 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.