Contract 0x27d9ba880D66C494a741B3ED52c98996fd4A0DfD 1

 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x4dba979503b195bab08ed47c36f173f535c17c32b302ec484d0e8ac3dc45d6d40x60e0604089798222021-07-08 15:14:12104 days 1 hr agoBiShares Finance: Deployer IN  Contract Creation0 BNB0.02657673
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
GovernorAlpha

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
File 1 of 2 : GovernorAlpha.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.6.0;
pragma experimental ABIEncoderV2;

import "../interfaces/ITimelock.sol";


contract GovernorAlpha {
  /// @dev The name of this contract
  string public constant name = "BiShares Governor Alpha";
  
  /// @dev The voting period which will be set after setVotingPeriodAfter has passed.
  uint256 public constant permanentVotingPeriod = 17_280; // ~3 days in blocks (assuming 15s blocks)

  /**
   * @dev 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 (uint256) {
    return 400_000e18; // 4% of BISON
  }

  /**
   * @dev The number of votes required in order for a voter to become a proposer
   */
  function proposalThreshold() public pure returns (uint256) {
    return 100_000e18; // 1% of BISON
  }

  /**
   * @dev The maximum number of actions that can be included in a proposal
   */
  function proposalMaxOperations() public pure returns (uint256) {
    return 10;
  }

  /**
   * @dev The delay before voting on a proposal may take place, once proposed
   */
  function votingDelay() public pure returns (uint256) {
    return 1;
  }

  /**
   * @dev The duration of voting on a proposal, in blocks
   */
  uint256 public votingPeriod = 2_880; // ~12 hours in blocks (assuming 15s blocks)

  /**
   * @dev The timestamp after which votingPeriod can be set to the permanent value.
   */
  uint256 public immutable setVotingPeriodAfter;

  /**
   * @dev The address of the Bishares Protocol Timelock
   */
  ITimelock public immutable timelock;

  /**
   * @dev The address of the Bishares governance token
   */
  BisonInterface public immutable bison;

  /**
   * @dev The total number of proposals
   */
  uint256 public proposalCount;

  /**
   * @param id Unique id for looking up a proposal
   * @param proposer Creator of the proposal
   * @param eta The timestamp that the proposal will be available for execution, set once the vote succeeds
   * @param targets The ordered list of target addresses for calls to be made
   * @param values The ordered list of values (i.e. msg.value) to be passed to the calls to be made
   * @param signatures The ordered list of function signatures to be called
   * @param calldatas The ordered list of calldata to be passed to each call
   * @param startBlock The block at which voting begins: holders must delegate their votes prior to this block
   * @param endBlock The block at which voting ends: votes must be cast prior to this block
   * @param forVotes Current number of votes in favor of this proposal
   * @param againstVotes Current number of votes in opposition to this proposal
   * @param canceled Flag marking whether the proposal has been canceled
   * @param executed Flag marking whether the proposal has been executed
   * @param receipts Receipts of ballots for the entire set of voters
   */
  struct Proposal {
    uint256 id;
    address proposer;
    uint256 eta;
    address[] targets;
    uint256[] values;
    string[] signatures;
    bytes[] calldatas;
    uint256 startBlock;
    uint256 endBlock;
    uint256 forVotes;
    uint256 againstVotes;
    bool canceled;
    bool executed;
    mapping(address => Receipt) receipts;
  }

  /**
   * @dev Ballot receipt record for a voter
   * @param hasVoted Whether or not a vote has been cast
   * @param support Whether or not the voter supports the proposal
   * @param votes The number of votes the voter had, which were cast
   */
  struct Receipt {
    bool hasVoted;
    bool support;
    uint96 votes;
  }

  /**
   * @dev Possible states that a proposal may be in
   */
  enum ProposalState {
    Pending,
    Active,
    Canceled,
    Defeated,
    Succeeded,
    Queued,
    Expired,
    Executed
  }

  /**
   * @dev The official record of all proposals ever proposed
   */
  mapping(uint256 => Proposal) public proposals;

  /**
   * @dev The latest proposal for each proposer
   */
  mapping(address => uint256) public latestProposalIds;

  /**
   * @dev The EIP-712 typehash for the contract's domain
   */
  bytes32 public constant DOMAIN_TYPEHASH = keccak256(
    "EIP712Domain(string name,uint256 chainId,address verifyingContract)"
  );

  /**
   * @dev The EIP-712 typehash for the ballot struct used by the contract
   */
  bytes32 public constant BALLOT_TYPEHASH = keccak256(
    "Ballot(uint256 proposalId,bool support)"
  );

  /**
   * @dev An event emitted when a new proposal is created
   */
  event ProposalCreated(
    uint256 id,
    address proposer,
    address[] targets,
    uint256[] values,
    string[] signatures,
    bytes[] calldatas,
    uint256 startBlock,
    uint256 endBlock,
    string description
  );

  /**
   * @dev An event emitted when a vote has been cast on a proposal
   */
  event VoteCast(
    address voter,
    uint256 proposalId,
    bool support,
    uint256 votes
  );

  /**
   * @dev An event emitted when a proposal has been canceled
   */
  event ProposalCanceled(uint256 id);

  /**
   * @dev An event emitted when a proposal has been queued in the Timelock
   */
  event ProposalQueued(uint256 id, uint256 eta);

  /**
   * @dev An event emitted when a proposal has been executed in the Timelock
   */
  event ProposalExecuted(uint256 id);

  constructor(address timelock_, address bison_, uint256 setVotingPeriodAfter_) public {
    timelock = ITimelock(timelock_);
    bison = BisonInterface(bison_);
    setVotingPeriodAfter = setVotingPeriodAfter_;
  }

  /**
   * @dev Sets votingPeriod to the permanent value.
   * Can only be called after setVotingPeriodAfter
   */
  function setPermanentVotingPeriod() external {
    require(
      block.timestamp >= setVotingPeriodAfter,
      "GovernorAlpha::setPermanentVotingPeriod: setting permanent voting period not allowed yet"
    );
    votingPeriod = permanentVotingPeriod;
  }

  function propose(
    address[] memory targets,
    uint256[] memory values,
    string[] memory signatures,
    bytes[] memory calldatas,
    string memory description
  ) public returns (uint256) {
    require(
      bison.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"
    );

    uint256 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"
      );
    }

    uint256 startBlock = add256(block.number, votingDelay());
    uint256 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(uint256 proposalId) public {
    require(
      state(proposalId) == ProposalState.Succeeded,
      "GovernorAlpha::queue: proposal can only be queued if it is succeeded"
    );
    Proposal storage proposal = proposals[proposalId];
    uint256 eta = add256(block.timestamp, timelock.delay());
    for (uint256 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,
    uint256 value,
    string memory signature,
    bytes memory data,
    uint256 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(uint256 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 (uint256 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(uint256 proposalId) public {
    ProposalState state = state(proposalId);
    require(
      state != ProposalState.Executed,
      "GovernorAlpha::cancel: cannot cancel executed proposal"
    );

    Proposal storage proposal = proposals[proposalId];
    require(
      bison.getPriorVotes(proposal.proposer, sub256(block.number, 1)) <
        proposalThreshold(),
      "GovernorAlpha::cancel: proposer above threshold"
    );

    proposal.canceled = true;
    for (uint256 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(uint256 proposalId)
    public
    view
    returns (
      address[] memory targets,
      uint256[] memory values,
      string[] memory signatures,
      bytes[] memory calldatas
    )
  {
    Proposal storage p = proposals[proposalId];
    return (p.targets, p.values, p.signatures, p.calldatas);
  }

  function getReceipt(uint256 proposalId, address voter)
    public
    view
    returns (Receipt memory)
  {
    return proposals[proposalId].receipts[voter];
  }

  function state(uint256 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(uint256 proposalId, bool support) public {
    return _castVote(msg.sender, proposalId, support);
  }

  function castVoteBySig(
    uint256 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,
    uint256 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"
    );
    uint96 votes = bison.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 add256(uint256 a, uint256 b) internal pure returns (uint256) {
    uint256 c = a + b;
    require(c >= a, "addition overflow");
    return c;
  }

  function sub256(uint256 a, uint256 b) internal pure returns (uint256) {
    require(b <= a, "subtraction underflow");
    return a - b;
  }

  function getChainId() internal pure returns (uint256) {
    uint256 chainId;
    assembly {
      chainId := chainid()
    }
    return chainId;
  }
}

interface BisonInterface {
  function getPriorVotes(address account, uint256 blockNumber)
    external
    view
    returns (uint96);
}

File 2 of 2 : ITimelock.sol
pragma solidity ^0.6.0;


interface ITimelock {
  event NewAdmin(address indexed newAdmin);
  event NewDelay(uint256 indexed newDelay);
  event CancelTransaction(
    bytes32 indexed txHash,
    address indexed target,
    uint256 value,
    string signature,
    bytes data,
    uint256 eta
  );
  event ExecuteTransaction(
    bytes32 indexed txHash,
    address indexed target,
    uint256 value,
    string signature,
    bytes data,
    uint256 eta
  );
  event QueueTransaction(
    bytes32 indexed txHash,
    address indexed target,
    uint256 value,
    string signature,
    bytes data,
    uint256 eta
  );

  function GRACE_PERIOD() external pure returns (uint256);
  
  function MINIMUM_DELAY() external pure returns (uint256);
  
  function MAXIMUM_DELAY() external pure returns (uint256);

  function admin() external view returns (address);

  function pendingAdmin() external view returns (address);

  function delay() external view returns (uint256);

  function queuedTransactions(bytes32) external view returns (bool);

  function setDelay(uint256 delay_) external;

  function setAdmin(address admin_) external;

  function queueTransaction(
    address target,
    uint256 value,
    string calldata signature,
    bytes calldata data,
    uint256 eta
  ) external returns (bytes32);

  function cancelTransaction(
    address target,
    uint256 value,
    string calldata signature,
    bytes calldata data,
    uint256 eta
  ) external;

  function executeTransaction(
    address target,
    uint256 value,
    string calldata signature,
    bytes calldata data,
    uint256 eta
  ) external payable returns (bytes memory);
}

Settings
{
  "remappings": [],
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "evmVersion": "istanbul",
  "libraries": {},
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "abi"
      ]
    }
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"timelock_","type":"address"},{"internalType":"address","name":"bison_","type":"address"},{"internalType":"uint256","name":"setVotingPeriodAfter_","type":"uint256"}],"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":"bison","outputs":[{"internalType":"contract BisonInterface","name":"","type":"address"}],"stateMutability":"view","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":"uint96","name":"votes","type":"uint96"}],"internalType":"struct GovernorAlpha.Receipt","name":"","type":"tuple"}],"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":"permanentVotingPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[],"name":"setPermanentVotingPeriod","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setVotingPeriodAfter","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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 ITimelock","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":"view","type":"function"}]

60e0604052610b406000553480156200001757600080fd5b5060405162002fe238038062002fe28339810160408190526200003a916200007c565b6001600160601b0319606093841b811660a0529190921b1660c052608052620000be565b80516001600160a01b03811681146200007657600080fd5b92915050565b60008060006060848603121562000091578283fd5b6200009d85856200005e565b9250620000ae85602086016200005e565b9150604084015190509250925092565b60805160a05160601c60c05160601c612ebf62000123600039806104ea5280610a085280610e9052806118595250806109085280610b0b5280610e5c528061130f52806116435280611a005280611afc52508061052f5280610e065250612ebf6000f3fe6080604052600436106101665760003560e01c806340e58ee5116100d1578063da35c6641161008a578063deaaa7cc11610064578063deaaa7cc146103eb578063e23a9a5214610400578063ec1e0e031461042d578063fe0d94c11461044257610166565b8063da35c66414610396578063da95691a146103ab578063ddf0b009146103cb57610166565b806340e58ee5146103025780634634c61f146103225780637bdbe4d0146103425780637fd9a85714610357578063b58131b01461036c578063d33219b41461038157610166565b80631a5b534e116101235780631a5b534e1461025157806320606b701461026657806324bc1a641461027b578063328dd982146102905780633932abb1146102c05780633e4f49e6146102d557610166565b8063013cf08b1461016b57806302a251a3146101a957806306fdde03146101cb5780630a7379a2146101ed57806315373e3d1461020f57806317977c6114610231575b600080fd5b34801561017757600080fd5b5061018b61018636600461221f565b610455565b6040516101a099989796959493929190612d7a565b60405180910390f35b3480156101b557600080fd5b506101be6104af565b6040516101a091906125c5565b3480156101d757600080fd5b506101e06104b5565b6040516101a09190612650565b3480156101f957600080fd5b506102026104e8565b6040516101a09190612628565b34801561021b57600080fd5b5061022f61022a366004612263565b61050c565b005b34801561023d57600080fd5b506101be61024c366004612091565b61051b565b34801561025d57600080fd5b506101be61052d565b34801561027257600080fd5b506101be610551565b34801561028757600080fd5b506101be610575565b34801561029c57600080fd5b506102b06102ab36600461221f565b610583565b6040516101a0949392919061256d565b3480156102cc57600080fd5b506101be610812565b3480156102e157600080fd5b506102f56102f036600461221f565b610817565b6040516101a0919061263c565b34801561030e57600080fd5b5061022f61031d36600461221f565b6109b7565b34801561032e57600080fd5b5061022f61033d366004612292565b610c4c565b34801561034e57600080fd5b506101be610dff565b34801561036357600080fd5b5061022f610e04565b34801561037857600080fd5b506101be610e4c565b34801561038d57600080fd5b50610202610e5a565b3480156103a257600080fd5b506101be610e7e565b3480156103b757600080fd5b506101be6103c63660046120ac565b610e84565b3480156103d757600080fd5b5061022f6103e636600461221f565b6112bd565b3480156103f757600080fd5b506101be611548565b34801561040c57600080fd5b5061042061041b366004612237565b61156c565b6040516101a09190612cb4565b34801561043957600080fd5b506101be6115db565b61022f61045036600461221f565b6115e1565b60026020819052600091825260409091208054600182015492820154600783015460088401546009850154600a860154600b9096015494966001600160a01b03169593949293919290919060ff8082169161010090041689565b60005481565b60405180604001604052806017815260200176426953686172657320476f7665726e6f7220416c70686160481b81525081565b7f000000000000000000000000000000000000000000000000000000000000000081565b6105173383836117be565b5050565b60036020526000908152604090205481565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b6954b40b1f852bda00000090565b6060806060806000600260008781526020019081526020016000209050806003018160040182600501836006018380548060200260200160405190810160405280929190818152602001828054801561060557602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116105e7575b505050505093508280548060200260200160405190810160405280929190818152602001828054801561065757602002820191906000526020600020905b815481526020019060010190808311610643575b5050505050925081805480602002602001604051908101604052809291908181526020016000905b8282101561072a5760008481526020908190208301805460408051601f60026000196101006001871615020190941693909304928301859004850281018501909152818152928301828280156107165780601f106106eb57610100808354040283529160200191610716565b820191906000526020600020905b8154815290600101906020018083116106f957829003601f168201915b50505050508152602001906001019061067f565b50505050915080805480602002602001604051908101604052809291908181526020016000905b828210156107fc5760008481526020908190208301805460408051601f60026000196101006001871615020190941693909304928301859004850281018501909152818152928301828280156107e85780601f106107bd576101008083540402835291602001916107e8565b820191906000526020600020905b8154815290600101906020018083116107cb57829003601f168201915b505050505081526020019060010190610751565b5050505090509450945094509450509193509193565b600190565b6000816001541015801561082b5750600082115b6108505760405162461bcd60e51b8152600401610847906127bb565b60405180910390fd5b6000828152600260205260409020600b81015460ff16156108755760029150506109b2565b8060070154431161088a5760009150506109b2565b8060080154431161089f5760019150506109b2565b80600a015481600901541115806108c057506108b9610575565b8160090154105b156108cf5760039150506109b2565b60028101546108e25760049150506109b2565b600b810154610100900460ff16156108fe5760079150506109b2565b61099c81600201547f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c1a287e26040518163ffffffff1660e01b815260040160206040518083038186803b15801561095f57600080fd5b505afa158015610973573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109979190612194565b6119a6565b42106109ac5760069150506109b2565b60059150505b919050565b60006109c282610817565b905060078160078111156109d257fe5b14156109f05760405162461bcd60e51b815260040161084790612be5565b6000828152600260205260409020610a06610e4c565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663782d6fe18360010160009054906101000a90046001600160a01b0316610a584360016119d2565b6040518363ffffffff1660e01b8152600401610a7592919061249e565b60206040518083038186803b158015610a8d57600080fd5b505afa158015610aa1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ac591906122e8565b6001600160601b031610610aeb5760405162461bcd60e51b8152600401610847906129b1565b600b8101805460ff1916600117905560005b6003820154811015610c0f577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663591fcdfe836003018381548110610b4757fe5b6000918252602090912001546004850180546001600160a01b039092169185908110610b6f57fe5b9060005260206000200154856005018581548110610b8957fe5b90600052602060002001866006018681548110610ba257fe5b9060005260206000200187600201546040518663ffffffff1660e01b8152600401610bd1959493929190612534565b600060405180830381600087803b158015610beb57600080fd5b505af1158015610bff573d6000803e3d6000fd5b505060019092019150610afd9050565b507f789cf55be980739dad1d0699b93b58e806b51c9d96619bfa8fe0a28abaa7b30c83604051610c3f91906125c5565b60405180910390a1505050565b604080518082019091526017815276426953686172657320476f7665726e6f7220416c70686160481b60209091015260007f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a8667ffae1f5892ca78673d8505d7cf92c0d0e297ebd1e92380786f52631551583d3f5610cc76119fa565b30604051602001610cdb94939291906125ce565b60405160208183030381529060405280519060200120905060007f8e25870c07e0b0b3884c78da52790939a455c275406c44ae8b434b692fb916ee8787604051602001610d2a939291906125f2565b60405160208183030381529060405280519060200120905060008282604051602001610d57929190612483565b604051602081830303815290604052805190602001209050600060018288888860405160008152602001604052604051610d94949392919061260a565b6020604051602081039080840390855afa158015610db6573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610de95760405162461bcd60e51b815260040161084790612b13565b610df4818a8a6117be565b505050505050505050565b600a90565b7f0000000000000000000000000000000000000000000000000000000000000000421015610e445760405162461bcd60e51b815260040161084790612738565b614380600055565b69152d02c7e14af680000090565b7f000000000000000000000000000000000000000000000000000000000000000081565b60015481565b6000610e8e610e4c565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663782d6fe133610ec94360016119d2565b6040518363ffffffff1660e01b8152600401610ee692919061249e565b60206040518083038186803b158015610efe57600080fd5b505afa158015610f12573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f3691906122e8565b6001600160601b031611610f5c5760405162461bcd60e51b815260040161084790612ab6565b84518651148015610f6e575083518651145b8015610f7b575082518651145b610f975760405162461bcd60e51b815260040161084790612947565b8551610fb55760405162461bcd60e51b815260040161084790612a6a565b610fbd610dff565b86511115610fdd5760405162461bcd60e51b8152600401610847906128d4565b33600090815260036020526040902054801561105a576000610ffe82610817565b9050600181600781111561100e57fe5b141561102c5760405162461bcd60e51b815260040161084790612b62565b600081600781111561103a57fe5b14156110585760405162461bcd60e51b815260040161084790612851565b505b600061106843610997610812565b90506000611078826000546119a6565b6001805481019055905061108a611b93565b604051806101a001604052806001548152602001336001600160a01b03168152602001600081526020018b81526020018a815260200189815260200188815260200184815260200183815260200160008152602001600081526020016000151581526020016000151581525090508060026000836000015181526020019081526020016000206000820151816000015560208201518160010160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060408201518160020155606082015181600301908051906020019061116d929190611c08565b5060808201518051611189916004840191602090910190611c6d565b5060a082015180516111a5916005840191602090910190611cb4565b5060c082015180516111c1916006840191602090910190611d0d565b5060e082015181600701556101008201518160080155610120820151816009015561014082015181600a015561016082015181600b0160006101000a81548160ff02191690831515021790555061018082015181600b0160016101000a81548160ff02191690831515021790555090505080600001516003600083602001516001600160a01b03166001600160a01b03168152602001908152602001600020819055507f7d84a6263ae0d98d3329bd7b46bb4e8d6f98cd35a7adb45c274c8b7fd5ebd5e08160000151338c8c8c8c89898e6040516112a799989796959493929190612ce2565b60405180910390a1519998505050505050505050565b60046112c882610817565b60078111156112d357fe5b146112f05760405162461bcd60e51b815260040161084790612663565b60006002600083815260200190815260200160002090506000611366427f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636a42b8f86040518163ffffffff1660e01b815260040160206040518083038186803b15801561095f57600080fd5b905060005b600383015481101561150e5761150683600301828154811061138957fe5b6000918252602090912001546004850180546001600160a01b0390921691849081106113b157fe5b90600052602060002001548560050184815481106113cb57fe5b600091825260209182902001805460408051601f60026000196101006001871615020190941693909304928301859004850281018501909152818152928301828280156114595780601f1061142e57610100808354040283529160200191611459565b820191906000526020600020905b81548152906001019060200180831161143c57829003601f168201915b505050505086600601858154811061146d57fe5b600091825260209182902001805460408051601f60026000196101006001871615020190941693909304928301859004850281018501909152818152928301828280156114fb5780601f106114d0576101008083540402835291602001916114fb565b820191906000526020600020905b8154815290600101906020018083116114de57829003601f168201915b5050505050866119fe565b60010161136b565b50600282018190556040517f9a2e42fd6722813d69113e7d0079d3d940171428df7373df9c7f7617cfda289290610c3f9085908490612dc6565b7f8e25870c07e0b0b3884c78da52790939a455c275406c44ae8b434b692fb916ee81565b611574611d66565b5060008281526002602090815260408083206001600160a01b0385168452600c018252918290208251606081018452905460ff80821615158352610100820416151592820192909252620100009091046001600160601b0316918101919091525b92915050565b61438081565b60056115ec82610817565b60078111156115f757fe5b146116145760405162461bcd60e51b8152600401610847906126cd565b6000818152600260205260408120600b8101805461ff001916610100179055905b6003820154811015611782577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316630825f38f83600401838154811061167f57fe5b906000526020600020015484600301848154811061169957fe5b6000918252602090912001546004860180546001600160a01b0390921691869081106116c157fe5b90600052602060002001548660050186815481106116db57fe5b906000526020600020018760060187815481106116f457fe5b9060005260206000200188600201546040518763ffffffff1660e01b8152600401611723959493929190612534565b6000604051808303818588803b15801561173c57600080fd5b505af1158015611750573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f1916820160405261177991908101906121ac565b50600101611635565b507f712ae1383f79ac853f8d882153778e0260ef8f03b504e2866e0593e04d2b291f826040516117b291906125c5565b60405180910390a15050565b60016117c983610817565b60078111156117d457fe5b146117f15760405162461bcd60e51b815260040161084790612c3b565b60008281526002602090815260408083206001600160a01b0387168452600c8101909252909120805460ff161561183a5760405162461bcd60e51b815260040161084790612804565b600782015460405163782d6fe160e01b81526000916001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163782d6fe19161188f918a919060040161249e565b60206040518083038186803b1580156118a757600080fd5b505afa1580156118bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118df91906122e8565b90508315611908576118fe8360090154826001600160601b03166119a6565b6009840155611925565b61191f83600a0154826001600160601b03166119a6565b600a8401555b8154600160ff199091161761ff00191661010085151502176dffffffffffffffffffffffff00001916620100006001600160601b038316021782556040517f877856338e13f63d0c36822ff0ef736b80934cd90574a3a5bc9262c39d217c46906119969088908890889086906124b7565b60405180910390a1505050505050565b6000828201838110156119cb5760405162461bcd60e51b81526004016108479061291c565b9392505050565b6000828211156119f45760405162461bcd60e51b815260040161084790612c85565b50900390565b4690565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f2b065378686868686604051602001611a469594939291906124e8565b604051602081830303815290604052805190602001206040518263ffffffff1660e01b8152600401611a7891906125c5565b60206040518083038186803b158015611a9057600080fd5b505afa158015611aa4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ac89190612178565b15611ae55760405162461bcd60e51b815260040161084790612a00565b604051633a66f90160e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690633a66f90190611b3990889088908890889088906004016124e8565b602060405180830381600087803b158015611b5357600080fd5b505af1158015611b67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b8b9190612194565b505050505050565b604051806101a001604052806000815260200160006001600160a01b031681526020016000815260200160608152602001606081526020016060815260200160608152602001600081526020016000815260200160008152602001600081526020016000151581526020016000151581525090565b828054828255906000526020600020908101928215611c5d579160200282015b82811115611c5d57825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190611c28565b50611c69929150611d86565b5090565b828054828255906000526020600020908101928215611ca8579160200282015b82811115611ca8578251825591602001919060010190611c8d565b50611c69929150611da5565b828054828255906000526020600020908101928215611d01579160200282015b82811115611d015782518051611cf1918491602090910190611dba565b5091602001919060010190611cd4565b50611c69929150611e27565b828054828255906000526020600020908101928215611d5a579160200282015b82811115611d5a5782518051611d4a918491602090910190611dba565b5091602001919060010190611d2d565b50611c69929150611e44565b604080516060810182526000808252602082018190529181019190915290565b5b80821115611c695780546001600160a01b0319168155600101611d87565b5b80821115611c695760008155600101611da6565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10611dfb57805160ff1916838001178555611ca8565b82800160010185558215611ca85791820182811115611ca8578251825591602001919060010190611c8d565b80821115611c69576000611e3b8282611e61565b50600101611e27565b80821115611c69576000611e588282611e61565b50600101611e44565b50805460018160011615610100020316600290046000825580601f10611e875750611ea5565b601f016020900490600052602060002090810190611ea59190611da5565b50565b80356001600160a01b03811681146115d557600080fd5b600082601f830112611ecf578081fd5b8135611ee2611edd82612dfb565b612dd4565b818152915060208083019084810181840286018201871015611f0357600080fd5b60005b84811015611f2a57611f188883611ea8565b84529282019290820190600101611f06565b505050505092915050565b600082601f830112611f45578081fd5b8135611f53611edd82612dfb565b818152915060208083019084810160005b84811015611f2a57611f7b888484358a0101612043565b84529282019290820190600101611f64565b600082601f830112611f9d578081fd5b8135611fab611edd82612dfb565b818152915060208083019084810160005b84811015611f2a57611fd3888484358a0101612043565b84529282019290820190600101611fbc565b600082601f830112611ff5578081fd5b8135612003611edd82612dfb565b81815291506020808301908481018184028601820187101561202457600080fd5b60005b84811015611f2a57813584529282019290820190600101612027565b600082601f830112612053578081fd5b8135612061611edd82612e1b565b915080825283602082850101111561207857600080fd5b8060208401602084013760009082016020015292915050565b6000602082840312156120a2578081fd5b6119cb8383611ea8565b600080600080600060a086880312156120c3578081fd5b853567ffffffffffffffff808211156120da578283fd5b6120e689838a01611ebf565b965060208801359150808211156120fb578283fd5b61210789838a01611fe5565b9550604088013591508082111561211c578283fd5b61212889838a01611f8d565b9450606088013591508082111561213d578283fd5b61214989838a01611f35565b9350608088013591508082111561215e578283fd5b5061216b88828901612043565b9150509295509295909350565b600060208284031215612189578081fd5b81516119cb81612e7b565b6000602082840312156121a5578081fd5b5051919050565b6000602082840312156121bd578081fd5b815167ffffffffffffffff8111156121d3578182fd5b8201601f810184136121e3578182fd5b80516121f1611edd82612e1b565b818152856020838501011115612205578384fd5b612216826020830160208601612e4b565b95945050505050565b600060208284031215612230578081fd5b5035919050565b60008060408385031215612249578182fd5b8235915061225a8460208501611ea8565b90509250929050565b60008060408385031215612275578182fd5b82359150602083013561228781612e7b565b809150509250929050565b600080600080600060a086880312156122a9578283fd5b8535945060208601356122bb81612e7b565b9350604086013560ff811681146122d0578384fd5b94979396509394606081013594506080013592915050565b6000602082840312156122f9578081fd5b81516001600160601b03811681146119cb578182fd5b6000815180845260208085019450808401835b838110156123475781516001600160a01b031687529582019590820190600101612322565b509495945050505050565b6000815180845260208085018081965082840281019150828601855b858110156123985782840389526123868483516123d4565b9885019893509084019060010161236e565b5091979650505050505050565b6000815180845260208085019450808401835b83811015612347578151875295820195908201906001016123b8565b600081518084526123ec816020860160208601612e4b565b601f01601f19169290920160200192915050565b6000815460018082166000811461241e576001811461243c5761247a565b60028304607f16865260ff198316602087015260408601935061247a565b6002830480875261244c86612e3f565b60005b828110156124705781546020828b010152848201915060208101905061244f565b8801602001955050505b50505092915050565b61190160f01b81526002810192909252602282015260420190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b039490941684526020840192909252151560408301526001600160601b0316606082015260800190565b600060018060a01b038716825285602083015260a0604083015261250f60a08301866123d4565b828103606084015261252181866123d4565b9150508260808301529695505050505050565b600060018060a01b038716825285602083015260a0604083015261255b60a0830186612400565b82810360608401526125218186612400565b600060808252612580608083018761230f565b828103602084015261259281876123a5565b905082810360408401526125a68186612352565b905082810360608401526125ba8185612352565b979650505050505050565b90815260200190565b938452602084019290925260408301526001600160a01b0316606082015260800190565b92835260208301919091521515604082015260600190565b93845260ff9290921660208401526040830152606082015260800190565b6001600160a01b0391909116815260200190565b602081016008831061264a57fe5b91905290565b6000602082526119cb60208301846123d4565b60208082526044908201527f476f7665726e6f72416c7068613a3a71756575653a2070726f706f73616c206360408201527f616e206f6e6c79206265207175657565642069662069742069732073756363656060820152631959195960e21b608082015260a00190565b60208082526045908201527f476f7665726e6f72416c7068613a3a657865637574653a2070726f706f73616c60408201527f2063616e206f6e6c7920626520657865637574656420696620697420697320716060820152641d595d595960da1b608082015260a00190565b60208082526058908201527f476f7665726e6f72416c7068613a3a7365745065726d616e656e74566f74696e60408201527f67506572696f643a2073657474696e67207065726d616e656e7420766f74696e60608201527f6720706572696f64206e6f7420616c6c6f776564207965740000000000000000608082015260a00190565b60208082526029908201527f476f7665726e6f72416c7068613a3a73746174653a20696e76616c69642070726040820152681bdc1bdcd85b081a5960ba1b606082015260800190565b6020808252602d908201527f476f7665726e6f72416c7068613a3a5f63617374566f74653a20766f7465722060408201526c185b1c9958591e481d9bdd1959609a1b606082015260800190565b60208082526059908201527f476f7665726e6f72416c7068613a3a70726f706f73653a206f6e65206c69766560408201527f2070726f706f73616c207065722070726f706f7365722c20666f756e6420616e60608201527f20616c72656164792070656e64696e672070726f706f73616c00000000000000608082015260a00190565b60208082526028908201527f476f7665726e6f72416c7068613a3a70726f706f73653a20746f6f206d616e7960408201526720616374696f6e7360c01b606082015260800190565b6020808252601190820152706164646974696f6e206f766572666c6f7760781b604082015260600190565b60208082526044908201527f476f7665726e6f72416c7068613a3a70726f706f73653a2070726f706f73616c60408201527f2066756e6374696f6e20696e666f726d6174696f6e206172697479206d69736d6060820152630c2e8c6d60e31b608082015260a00190565b6020808252602f908201527f476f7665726e6f72416c7068613a3a63616e63656c3a2070726f706f7365722060408201526e18589bdd99481d1a1c995cda1bdb19608a1b606082015260800190565b60208082526044908201527f476f7665726e6f72416c7068613a3a5f71756575654f725265766572743a207060408201527f726f706f73616c20616374696f6e20616c7265616479207175657565642061746060820152632065746160e01b608082015260a00190565b6020808252602c908201527f476f7665726e6f72416c7068613a3a70726f706f73653a206d7573742070726f60408201526b7669646520616374696f6e7360a01b606082015260800190565b6020808252603f908201527f476f7665726e6f72416c7068613a3a70726f706f73653a2070726f706f73657260408201527f20766f7465732062656c6f772070726f706f73616c207468726573686f6c6400606082015260800190565b6020808252602f908201527f476f7665726e6f72416c7068613a3a63617374566f746542795369673a20696e60408201526e76616c6964207369676e617475726560881b606082015260800190565b60208082526058908201527f476f7665726e6f72416c7068613a3a70726f706f73653a206f6e65206c69766560408201527f2070726f706f73616c207065722070726f706f7365722c20666f756e6420616e60608201527f20616c7265616479206163746976652070726f706f73616c0000000000000000608082015260a00190565b60208082526036908201527f476f7665726e6f72416c7068613a3a63616e63656c3a2063616e6e6f742063616040820152751b98d95b08195e1958dd5d1959081c1c9bdc1bdcd85b60521b606082015260800190565b6020808252602a908201527f476f7665726e6f72416c7068613a3a5f63617374566f74653a20766f74696e67604082015269081a5cc818db1bdcd95960b21b606082015260800190565b6020808252601590820152747375627472616374696f6e20756e646572666c6f7760581b604082015260600190565b8151151581526020808301511515908201526040918201516001600160601b03169181019190915260600190565b8981526001600160a01b038916602082015261012060408201819052600090612d0d8382018b61230f565b90508281036060840152612d21818a6123a5565b90508281036080840152612d358189612352565b905082810360a0840152612d498188612352565b90508560c08401528460e0840152828103610100840152612d6a81856123d4565b9c9b505050505050505050505050565b9889526001600160a01b0397909716602089015260408801959095526060870193909352608086019190915260a085015260c0840152151560e083015215156101008201526101200190565b918252602082015260400190565b60405181810167ffffffffffffffff81118282101715612df357600080fd5b604052919050565b600067ffffffffffffffff821115612e11578081fd5b5060209081020190565b600067ffffffffffffffff821115612e31578081fd5b50601f01601f191660200190565b60009081526020902090565b60005b83811015612e66578181015183820152602001612e4e565b83811115612e75576000848401525b50505050565b8015158114611ea557600080fdfea2646970667358221220cd5792f76b14d3a9874a1d9987468cd41d6b87255480934942ea9c5d7e4bb17c64736f6c634300060c003300000000000000000000000015ddd3f0aad47a345cf55c5af4410b042846e4c900000000000000000000000019a6da6e382b85f827088092a3dbe864d9ccba7300000000000000000000000000000000000000000000000000000000612025e0

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

00000000000000000000000015ddd3f0aad47a345cf55c5af4410b042846e4c900000000000000000000000019a6da6e382b85f827088092a3dbe864d9ccba7300000000000000000000000000000000000000000000000000000000612025e0

-----Decoded View---------------
Arg [0] : timelock_ (address): 0x15ddd3f0aad47a345cf55c5af4410b042846e4c9
Arg [1] : bison_ (address): 0x19a6da6e382b85f827088092a3dbe864d9ccba73
Arg [2] : setVotingPeriodAfter_ (uint256): 1629496800

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 00000000000000000000000015ddd3f0aad47a345cf55c5af4410b042846e4c9
Arg [1] : 00000000000000000000000019a6da6e382b85f827088092a3dbe864d9ccba73
Arg [2] : 00000000000000000000000000000000000000000000000000000000612025e0


Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.