ETH Price: $2,876.42 (-2.16%)

Contract

0x3577D305984931111f2eCb449c91C473C4A985df

Overview

ETH Balance

Linea Mainnet LogoLinea Mainnet LogoLinea Mainnet Logo0 ETH

ETH Value

$0.00

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Block
From
To
Set Governor210352282025-07-19 12:19:09190 days ago1752927549IN
0x3577D305...3C4A985df
0 ETH0.000001980.06985398
Set Market Admin210352162025-07-19 12:18:40190 days ago1752927520IN
0x3577D305...3C4A985df
0 ETH0.000001930.06999259
Set Proposal Gua...209353962025-07-16 18:50:34193 days ago1752691834IN
0x3577D305...3C4A985df
0 ETH0.000002270.04768045

Latest 1 internal transaction

Advanced mode:
Parent Transaction Hash Block From To
209306952025-07-16 15:42:41193 days ago1752680561  Contract Creation0 ETH
Cross-Chain Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
MarketUpdateProposer

Compiler Version
v0.8.15+commit.e14f2714

Optimization Enabled:
Yes with 1 runs

Other Settings:
london EvmVersion
// SPDX-License-Identifier: BUSL-1.1
pragma solidity 0.8.15;

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

/**
* @title MarketUpdateProposer
* @notice This contract allows for the creation of proposals that can be executed by the timelock
* @dev This contract is used to propose market updates
* Few important points to note:
* 1) The marketAdmin can propose updates. The marketAdmin can be set by the governor. marketAdmin will be a multi-sig.
* 2) Here governor is the main-governor-timelock. This terminology(using governor as variable for timelock) is for
*    consistency with Configurator.sol.
* 3) If marketAdmin/multi-sig is compromised, the new marketAdmin can be set by the governor.
* 4) While the marketAdmin/multi-sig is compromised, the new marketAdmin can propose updates. But those updates will be
*    sent to timelock and can be paused by the marketAdminPauseGuardian Configurator and CometProxyAdmin.
* 5) The proposalGuardian can also be used for the same purpose and can cancel the proposal.
*
*
*/
contract MarketUpdateProposer {
    struct MarketUpdateProposal {
        /// @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 Flag marking whether the proposal has been canceled
        bool canceled;

        /// @notice Flag marking whether the proposal has been executed
        bool executed;
    }

    enum ProposalState {
        Canceled,
        Queued,
        Executed,
        Expired
    }

    address public governor;
    address public proposalGuardian;
    address public marketAdmin;
    ITimelock public timelock;

    /// @notice The official record of all proposals ever proposed
    mapping(uint => MarketUpdateProposal) public proposals;
    /// @notice The total number of proposals
    uint public proposalCount;

    /// @notice The initial proposal ID, set when the contract is deployed
    uint public constant INITIAL_PROPOSAL_ID = 0;
    
    /// @notice The maximum number of actions that can be included in a proposal
    uint public constant PROPOSAL_MAX_OPERATIONS = 20; // 20 actions

    /// @notice An event emitted when a new proposal is created
    event MarketUpdateProposalCreated(uint id, address proposer, address[] targets, uint[] values, string[] signatures, bytes[] calldatas, string description);
    event MarketUpdateProposalExecuted(uint id);
    event MarketUpdateProposalCancelled(uint id);
    event SetProposalGuardian(address indexed oldProposalGuardian, address indexed newProposalGuardian);
    event SetMarketAdmin(address indexed oldAdmin, address indexed newAdmin);
    event SetGovernor(address indexed oldGovernor, address indexed newGovernor);

    error Unauthorized();
    error InvalidAddress();

    constructor(address governor_, address marketAdmin_, address proposalGuardian_, ITimelock timelock_) public {
        if (governor_ == address(0) || marketAdmin_ == address(0) || address(timelock_) == address(0)) revert InvalidAddress();
        governor = governor_;
        marketAdmin = marketAdmin_;
        proposalGuardian = proposalGuardian_;
        timelock = timelock_;
    }
    
    /**
     * @notice Transfers the governor rights to a new address
     * @dev Can only be called by the governor. Reverts with Unauthorized if the caller is not the governor.
     * Emits an event with the old and new governor addresses.
     * @param newGovernor The address of the new governor.
     */
    function setGovernor(address newGovernor) external {
        if (msg.sender != governor) revert Unauthorized();
        if (address(newGovernor) == address(0)) revert InvalidAddress();
        
        address oldGovernor = governor;
        governor = newGovernor;
        emit SetGovernor(oldGovernor, newGovernor);
    }
    
    /**
     * @notice Sets a new proposalGuardian.
     * @dev Can only be called by the governor. Reverts with Unauthorized if the caller is not the owner.
     * Emits an event with the old and new proposalGuardian addresses.
     * Note that there is no enforced zero address check on `newProposalGuardian` as it may be a deliberate choice
     * to assign the zero address in certain scenarios. This design allows flexibility if the zero address
     * is intended to represent a specific state, such as temporarily disabling the proposalGuardian.
     * @param newProposalGuardian The address of the new market admin proposalGuardian.
     */
    function setProposalGuardian(address newProposalGuardian) external {
        if (msg.sender != governor) revert Unauthorized();
        address oldProposalGuardian = proposalGuardian;
        proposalGuardian = newProposalGuardian;
        emit SetProposalGuardian(oldProposalGuardian, newProposalGuardian);
    }

    /**
     * @notice Sets a new market admin.
     * @dev Can only be called by the governor. Reverts with Unauthorized if the caller is not the governor.
     * Emits an event with the old and new market admin addresses.
     * Note that there is no enforced zero address check on `newMarketAdmin` as it may be a deliberate choice
     * to assign the zero address in certain scenarios. This design allows flexibility if the zero address
     * is intended to represent a specific state, such as temporarily disabling the market admin role.
     * @param newMarketAdmin The address of the new market admin.
     */
    function setMarketAdmin(address newMarketAdmin) external {
        if (msg.sender != governor) revert Unauthorized();
        address oldMarketAdmin = marketAdmin;
        marketAdmin = newMarketAdmin;
        emit SetMarketAdmin(oldMarketAdmin, newMarketAdmin);
    }
    
    /**
     * @notice Function used to propose a new proposal for market updates
     * @dev Can only be called by the market admin. Reverts with Unauthorized if the caller is not the market admin
     * The function requires the provided arrays to have the same length and at least one action
     * Emits a MarketUpdateProposalCreated event with the proposal details
     * @param targets Target addresses for proposal calls
     * @param values Eth values for proposal calls
     * @param signatures Function signatures for proposal calls
     * @param calldatas Calldatas for proposal calls
     * @param description String description of the proposal
     * @return Proposal id of new proposal
     */
    function propose(address[] memory targets, uint[] memory values, string[] memory signatures, bytes[] memory calldatas, string memory description) public returns (uint) {
        if (msg.sender != marketAdmin) revert Unauthorized();
        require(targets.length == values.length && targets.length == signatures.length && targets.length == calldatas.length, "MarketUpdateProposer::propose: proposal function information arity mismatch");
        require(targets.length != 0, "MarketUpdateProposer::propose: must provide actions");
        require(targets.length <= PROPOSAL_MAX_OPERATIONS, "MarketUpdateProposer::propose: too many actions");
        
        proposalCount++;
        uint newProposalID = proposalCount;
        MarketUpdateProposal storage newProposal = proposals[newProposalID];

        require(newProposal.id == 0, "MarketUpdateProposer::propose: ProposalID collision");
        uint eta = block.timestamp + timelock.delay();
        newProposal.id = newProposalID;
        newProposal.proposer = msg.sender;
        newProposal.eta = eta;
        newProposal.targets = targets;
        newProposal.values = values;
        newProposal.signatures = signatures;
        newProposal.calldatas = calldatas;
        newProposal.canceled = false;
        newProposal.executed = false;

        emit MarketUpdateProposalCreated(newProposal.id, msg.sender, targets, values, signatures, calldatas, description);

        for (uint i = 0; i < newProposal.targets.length; i++) {
            queueOrRevertInternal(newProposal.targets[i], newProposal.values[i], newProposal.signatures[i], newProposal.calldatas[i], eta);
        }

        return newProposal.id;
    }

    function queueOrRevertInternal(address target, uint value, string memory signature, bytes memory data, uint eta) internal {
        require(!timelock.queuedTransactions(keccak256(abi.encode(target, value, signature, data, eta))), "MarketUpdateProposer::queueOrRevertInternal: identical proposal action already queued at eta");
        timelock.queueTransaction(target, value, signature, data, eta);
    }

    /**
      * @notice Executes a queued proposal if eta has passed
      * @param proposalId The id of the proposal to execute
      */
    function execute(uint proposalId) external payable {
        if (msg.sender != marketAdmin) revert Unauthorized();
        require(state(proposalId) == ProposalState.Queued, "MarketUpdateProposer::execute: proposal can only be executed if it is queued");
        MarketUpdateProposal 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 MarketUpdateProposalExecuted(proposalId);
    }

    /**
      * @notice Cancels a proposal only if sender is the proposer, proposalGuardian, or marketAdmin, and the proposal is not already executed
      * @param proposalId The id of the proposal to cancel
      */
    function cancel(uint proposalId) external {
        if (msg.sender != governor && msg.sender != proposalGuardian && msg.sender != marketAdmin) revert Unauthorized();
        require(state(proposalId) != ProposalState.Executed, "MarketUpdateProposer::cancel: cannot cancel executed proposal");

        MarketUpdateProposal storage proposal = proposals[proposalId];

        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 MarketUpdateProposalCancelled(proposalId);
    }

    /**
     * @notice Gets the state of a proposal
     * @param proposalId The id of the proposal
     * @return Proposal state
     */
    function state(uint proposalId) public view returns (ProposalState) {
        require(proposalCount >= proposalId && proposalId > INITIAL_PROPOSAL_ID, "MarketUpdateProposer::state: invalid proposal id");
        MarketUpdateProposal storage proposal = proposals[proposalId];
        if (proposal.canceled) {
            return ProposalState.Canceled;
        } else if (proposal.executed) {
            return ProposalState.Executed;
        } else if (block.timestamp >= (proposal.eta + timelock.GRACE_PERIOD())) {
            return ProposalState.Expired;
        } else {
            return ProposalState.Queued;
        }
    }


    /**
     * @notice Get details of a proposal by its id
     * @param proposalId The id of the proposal
     * @return id The id of the proposal
     * @return proposer The address of the proposer
     * @return eta The estimated time at which the proposal can be executed
     * @return targets targets of the proposal actions
     * @return values ETH values of the proposal actions
     * @return signatures signatures of the proposal actions
     * @return calldatas calldatas of the proposal actions
     * @return canceled boolean indicating whether the proposal has been canceled
     * @return executed boolean indicating whether the proposal has been executed
     */
    function getProposal(uint proposalId) public view
        returns (
            uint,
            address,
            uint,
            address[] memory,
            uint[] memory,
            string[] memory,
            bytes[] memory,
            bool,
            bool
        )
    {
        MarketUpdateProposal storage proposal = proposals[proposalId];
        return (
            proposal.id,
            proposal.proposer,
            proposal.eta,
            proposal.targets,
            proposal.values,
            proposal.signatures,
            proposal.calldatas,
            proposal.canceled,
            proposal.executed
        );
    }
}

// SPDX-License-Identifier: BUSL-1.1
pragma solidity 0.8.15;

/**
 * @dev Interface for interacting with a Timelock
 */
interface ITimelock {
    /// @notice Event emitted when a pending admin accepts admin position
    event NewAdmin(address indexed newAdmin);

    /// @notice Event emitted when new pending admin is set by the timelock
    event NewPendingAdmin(address indexed newPendingAdmin);

    /// @notice Event emitted when Timelock sets new delay value
    event NewDelay(uint indexed newDelay);

    /// @notice Event emitted when admin cancels an enqueued transaction
    event CancelTransaction(bytes32 indexed txHash, address indexed target, uint value, string signature,  bytes data, uint eta);

    /// @notice Event emitted when admin executes an enqueued transaction
    event ExecuteTransaction(bytes32 indexed txHash, address indexed target, uint value, string signature,  bytes data, uint eta);

    /// @notice Event emitted when admin enqueues a transaction
    event QueueTransaction(bytes32 indexed txHash, address indexed target, uint value, string signature, bytes data, uint eta);

    /// @notice The length of time, once the delay has passed, in which a transaction can be executed before it becomes stale
    function GRACE_PERIOD() virtual external view returns (uint);

    /// @notice The minimum value that the `delay` variable can be set to
    function MINIMUM_DELAY() virtual external view returns (uint);

    /// @notice The maximum value that the `delay` variable can be set to
    function MAXIMUM_DELAY() virtual external view returns (uint);

    /// @notice Address that has admin privileges
    function admin() virtual external view returns (address);

    /// @notice The address that may become the new admin by calling `acceptAdmin()`
    function pendingAdmin() virtual external view returns (address);

    /**
     * @notice Set the pending admin
     * @param pendingAdmin_ New pending admin address
     */
    function setPendingAdmin(address pendingAdmin_) virtual external;

    /**
     * @notice Accept the position of admin (if caller is the current pendingAdmin)
     */
    function acceptAdmin() virtual external;

    /// @notice Duration that a transaction must be queued before it can be executed
    function delay() virtual external view returns (uint);

    /**
     * @notice Set the delay value
     * @param delay New delay value
     */
    function setDelay(uint delay) virtual external;

    /// @notice Mapping of transaction hashes to whether that transaction is currently enqueued
    function queuedTransactions(bytes32 txHash) virtual external returns (bool);

    /**
     * @notice Enque a transaction
     * @param target Address that the transaction is targeted at
     * @param value Value to send to target address
     * @param signature Function signature to call on target address
     * @param data Calldata for function called on target address
     * @param eta Timestamp of when the transaction can be executed
     * @return txHash of the enqueued transaction
     */
    function queueTransaction(address target, uint value, string memory signature, bytes memory data, uint eta) virtual external returns (bytes32);

    /**
     * @notice Cancel an enqueued transaction
     * @param target Address that the transaction is targeted at
     * @param value Value of the transaction to cancel
     * @param signature Function signature of the transaction to cancel
     * @param data Calldata for the transaction to cancel
     * @param eta Timestamp of the transaction to cancel
     */
    function cancelTransaction(address target, uint value, string memory signature, bytes memory data, uint eta) virtual external;

    /**
     * @notice Execute an enqueued transaction
     * @param target Target address of the transaction to execute
     * @param value Value of the transaction to execute
     * @param signature Function signature of the transaction to execute
     * @param data Calldata for the transaction to execute
     * @param eta Timestamp of the transaction to execute
     * @return bytes returned from executing transaction
     */
    function executeTransaction(address target, uint value, string memory signature, bytes memory data, uint eta) virtual external payable returns (bytes memory);
}

Settings
{
  "remappings": [
    "@forge-std/=forge/lib/forge-std/",
    "@comet-contracts/=contracts/",
    "@openzeppelin/=node_modules/@openzeppelin/",
    "eth-gas-reporter/=node_modules/eth-gas-reporter/",
    "forge-std/=forge/lib/forge-std/src/",
    "hardhat/=node_modules/hardhat/"
  ],
  "optimizer": {
    "enabled": true,
    "runs": 1
  },
  "metadata": {
    "useLiteralContent": false,
    "bytecodeHash": "ipfs"
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "evmVersion": "london",
  "viaIR": true,
  "libraries": {}
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"address","name":"governor_","type":"address"},{"internalType":"address","name":"marketAdmin_","type":"address"},{"internalType":"address","name":"proposalGuardian_","type":"address"},{"internalType":"contract ITimelock","name":"timelock_","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"InvalidAddress","type":"error"},{"inputs":[],"name":"Unauthorized","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"}],"name":"MarketUpdateProposalCancelled","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":"string","name":"description","type":"string"}],"name":"MarketUpdateProposalCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"}],"name":"MarketUpdateProposalExecuted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldGovernor","type":"address"},{"indexed":true,"internalType":"address","name":"newGovernor","type":"address"}],"name":"SetGovernor","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldAdmin","type":"address"},{"indexed":true,"internalType":"address","name":"newAdmin","type":"address"}],"name":"SetMarketAdmin","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldProposalGuardian","type":"address"},{"indexed":true,"internalType":"address","name":"newProposalGuardian","type":"address"}],"name":"SetProposalGuardian","type":"event"},{"inputs":[],"name":"INITIAL_PROPOSAL_ID","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PROPOSAL_MAX_OPERATIONS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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"}],"name":"execute","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"}],"name":"getProposal","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address[]","name":"","type":"address[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"string[]","name":"","type":"string[]"},{"internalType":"bytes[]","name":"","type":"bytes[]"},{"internalType":"bool","name":"","type":"bool"},{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"governor","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proposalCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proposalGuardian","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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":"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":"address","name":"newGovernor","type":"address"}],"name":"setGovernor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketAdmin","type":"address"}],"name":"setMarketAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newProposalGuardian","type":"address"}],"name":"setProposalGuardian","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"}],"name":"state","outputs":[{"internalType":"enum MarketUpdateProposer.ProposalState","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"timelock","outputs":[{"internalType":"contract ITimelock","name":"","type":"address"}],"stateMutability":"view","type":"function"}]

6080346200010757601f62001d3d38819003918201601f19168301916001600160401b038311848410176200010c5780849260809460405283398101031262000107576200004d8162000122565b6200005b6020830162000122565b9060606200006c6040850162000122565b9301516001600160a01b038082169490929091859003620001075782169283158015620000fc575b8015620000f3575b620000e157829060018060a01b03199485600054161760005516836002541617600255168160015416176001556003541617600355604051611c059081620001388239f35b60405163e6c4247b60e01b8152600490fd5b5084156200009c565b508281161562000094565b600080fd5b634e487b7160e01b600052604160045260246000fd5b51906001600160a01b0382168203620001075756fe608080604052600436101561001357600080fd5b60003560e01c908163013cf08b1461160d575080630592bdc8146115e45780630c340a24146115bb57806336e7048a1461159f5780633e4f49e61461157057806340e58ee5146113735780635eb80a1a146112ff57806399fef356146112e3578063a660aca51461126f578063c42cf535146111eb578063c7f758a814610fc2578063d33219b414610f99578063da35c66414610f7b578063da95691a1461037a578063fc473616146103515763fe0d94c1146100cf57600080fd5b602080600319360112610294576002546001600160a01b0391906004359083163303610340576100fe81611a86565b600481101561032a5760018091036102aa5781600052600483528060406000206007810161010061ff00198254161790556000956003968783016004840160058501926002600687019601965b61017c575b7fae9ee85932d40d4f1287c866c4c5058c820b056991417d122f4eb6e85b3e57a48a8a604051908152a1005b82548110156102a5578060008787878f876101fe6101de8f996101d781868f97828b6101cc9254169b6101bf826101b3818d611943565b905490871b1c9c611943565b905490851b1c1698611943565b9054911b1c97611943565b5097611943565b509854604051630825f38f60e01b8152998a978896879560048701611a49565b03925af180156102995761021d575b6102179150611857565b8761014b565b3d806000843e61022d81846117ad565b8201918b81840312610294578051906001600160401b03821161029457019180601f84011215610294578251610262816117e7565b9161027060405193846117ad565b8183528d828601011161029457610217938d8061028f940191016116f7565b61020d565b600080fd5b6040513d6000823e3d90fd5b610150565b60405162461bcd60e51b815260048101849052604c60248201527f4d61726b657455706461746550726f706f7365723a3a657865637574653a207060448201527f726f706f73616c2063616e206f6e6c792062652065786563757465642069662060648201526b1a5d081a5cc81c5d595d595960a21b608482015260a490fd5b634e487b7160e01b600052602160045260246000fd5b6040516282b42960e81b8152600490fd5b34610294576000366003190112610294576001546040516001600160a01b039091168152602090f35b346102945760a0366003190112610294576004356001600160401b03811161029457366023820112156102945780600401356103b5816117d0565b916103c360405193846117ad565b81835260208301906024829360051b8201019036821161029457602401915b818310610f5b5750506024359290506001600160401b038311610294573660238401121561029457826004013592610419846117d0565b9061042760405192836117ad565b848252602082016024819660051b8301019136831161029457602401905b828210610f4b57505060443590506001600160401b03811161029457366023820112156102945780600401359061047b826117d0565b9061048960405192836117ad565b82825260208201906024829460051b820101903682116102945760248101925b828410610f1d575050606435929150506001600160401b03821161029457366023830112156102945781600401356104e0816117d0565b926104ee60405194856117ad565b818452602084019160051b8101602401823682116102945760248301905b828210610eda5750506084359150506001600160401b03811161029457610537903690600401611839565b6002549094906001600160a01b03163303610340578651865181149081610ecf575b81610ec4575b5015610e4557865115610de4576014875111610d8757610580600554611857565b98896005558960005260046020526040600020988954610d2657600354604051630d48571f60e31b815290602090829060049082906001600160a01b03165afa801561029957600090610cf2575b6105d991504261187c565b9a8a5560018a0180546001600160a01b0319163317905560028a018b9055885190600160401b8211610abb5760038b01805483825561061a9184919061189f565b60038b0160005260206000206000915b838310610cc2575050885192915050600160401b8211610abb5760048a0180548382556106599184919061189f565b60048a0160005260206000206000915b838310610cac575050845192915050600160401b8211610abb5760058901548260058b0155808310610c2d575b5090600589016000526020600020916000905b828210610b50575050845192915050600160401b8211610abb5760068801548260068a0155808310610ad1575b5090600688016000526020600020916000905b8282106109d8578a8a7f697cc6583c21240df122b4bb0908b86837d2117538b014f206a13bee022b9a9e8b8b61078e8c6107808d6107728e60078a0161ffff1981541690556107648a54976107566040519a8b9a8b523360208c015260e060408c015260e08b0190611686565b9089820360608b01526116c3565b908782036080890152611751565b9085820360a0870152611751565b9083820360c085015261172c565b0390a160005b60038201548110156109cc576108096107b08260038501611943565b905460039190911b1c6001600160a01b03166108096107d28460048701611943565b90549060031b1c9161081c6107ea8660058901611943565b506108106107fb8860068b01611943565b509160405195868092611971565b03856117ad565b60405195868092611971565b6000602060018060a01b03600354166024866108486108568d6040519283918d8c8a8501978d89611a07565b03601f1981018352826117ad565b519020604051948593849263f2b0653760e01b845260048401525af190811561029957600091610991575b5061090157602092600060018060a01b0360035416926108b88a60405198899788968795633a66f90160e01b875260048701611a07565b03925af18015610299576108d6575b506108d190611857565b610794565b602090813d83116108fa575b6108ec81836117ad565b8101031261029457836108c7565b503d6108e2565b60405162461bcd60e51b815260206004820152605c60248201527f4d61726b657455706461746550726f706f7365723a3a71756575654f7252657660448201527f657274496e7465726e616c3a206964656e746963616c2070726f706f73616c2060648201527b616374696f6e20616c7265616479207175657565642061742065746160201b608482015260a490fd5b90506020813d6020116109c4575b816109ac602093836117ad565b81010312610294575180151581036102945788610881565b3d915061099f565b60208254604051908152f35b80518051906001600160401b038211610abb576109ff826109f988546118c4565b886118fe565b602090601f8311600114610a4b579282600194936020938695600092610a40575b5050600019600383901b1c191690841b1787555b019401910190926106e9565b015190503880610a20565b908660005260206000209160005b601f1985168110610aa3575083602093600196938796938794601f19811610610a8a575b505050811b018755610a34565b015160001960f88460031b161c19169055388080610a7d565b91926020600181928685015181550194019201610a59565b634e487b7160e01b600052604160045260246000fd5b600689016000526020600020908382015b8183018110610af25750506106d6565b80610aff600192546118c4565b80610b0c575b5001610ae2565b601f908181118414610b25575050600081555b8d610b05565b83610b4192846000526020600020920160051c82019101611888565b60006020812081835555610b1f565b80518051906001600160401b038211610abb57610b71826109f988546118c4565b602090601f8311600114610bbd579282600194936020938695600092610bb2575b5050600019600383901b1c191690841b1787555b019401910190926106a9565b015190503880610b92565b908660005260206000209160005b601f1985168110610c15575083602093600196938796938794601f19811610610bfc575b505050811b018755610ba6565b015160001960f88460031b161c19169055388080610bef565b91926020600181928685015181550194019201610bcb565b60058a016000526020600020908382015b8183018110610c4e575050610696565b80610c5b600192546118c4565b80610c68575b5001610c3e565b601f908181118414610c81575050600081555b8e610c61565b83610c9d92846000526020600020920160051c82019101611888565b60006020812081835555610c7b565b6001602082829351855501920192019190610669565b805182546001600160a01b0319166001600160a01b0391909116178255600192830192919091019060200161062a565b506020813d602011610d1e575b81610d0c602093836117ad565b81010312610294576105d990516105ce565b3d9150610cff565b60405162461bcd60e51b815260206004820152603360248201527f4d61726b657455706461746550726f706f7365723a3a70726f706f73653a20506044820152723937b837b9b0b624a21031b7b63634b9b4b7b760691b6064820152608490fd5b60405162461bcd60e51b815260206004820152602f60248201527f4d61726b657455706461746550726f706f7365723a3a70726f706f73653a207460448201526e6f6f206d616e7920616374696f6e7360881b6064820152608490fd5b60405162461bcd60e51b815260206004820152603360248201527f4d61726b657455706461746550726f706f7365723a3a70726f706f73653a206d6044820152727573742070726f7669646520616374696f6e7360681b6064820152608490fd5b60405162461bcd60e51b815260206004820152604b60248201527f4d61726b657455706461746550726f706f7365723a3a70726f706f73653a207060448201527f726f706f73616c2066756e6374696f6e20696e666f726d6174696f6e2061726960648201526a0e8f240dad2e6dac2e8c6d60ab1b608482015260a490fd5b90508451148a61055f565b845181149150610559565b81356001600160401b03811161029457366043828701011215610294576020918291610f129036908801602481013590604401611802565b81520191019061050c565b6001600160401b038435116102945760208091610f403660248835870101611839565b8152019301926104a9565b8135815260209182019101610445565b82356001600160a01b0381168103610294578152602092830192016103e2565b34610294576000366003190112610294576020600554604051908152f35b34610294576000366003190112610294576003546040516001600160a01b039091168152602090f35b346102945760203660031901126102945760043560005260046020526040600020805460018060a01b0360018301541691600281015490600381016004820160058301916007840154946040518083602082955493848152019060005260206000209260005b8181106111c957505061103d925003836117ad565b6040518084602082965493848152019060005260206000209260005b8181106111b057505061106e925003846117ad565b8354611079816117d0565b9461108760405196876117ad565b818652602086019060005260206000206000915b83831061118b575050505060068501546110b4816117d0565b956110c260405197886117ad565b818752600660208801910160005260206000206000915b83831061115f57505050509261112860ff959361111a61113694611144976040519c8d9c8d5260208d015260408c01526101208060608d01528b0190611686565b9089820360808b01526116c3565b9087820360a0890152611751565b9085820360c0870152611751565b91818116151560e085015260081c1615156101008301520390f35b60016020819260405161117d816111768189611971565b03826117ad565b8152019201920191906110d9565b6001602081926040516111a2816111768189611971565b81520192019201919061109b565b8454835260019485019488945060209093019201611059565b84546001600160a01b0316835260019485019487945060209093019201611028565b3461029457602036600319011261029457611204611670565b600054906001600160a01b0380831691338390036103405716801561125d578060009360018060a01b031916178355604051917fe7fbe5d154bee3a04d0155120b6990ed889fe54e7ba598e69d51ff35a4c43e5f8484a3f35b60405163e6c4247b60e01b8152600490fd5b3461029457602036600319011261029457611288611670565b6000546001600160a01b0391908216330361034057600180549183166001600160a01b0319831681179091556040516000939092167fb46f5867574bd122a6c216f65800495cedf15e873d0ff4efbc0fc0e6d03a811c8484a3f35b3461029457600036600319011261029457602060405160008152f35b3461029457602036600319011261029457611318611670565b6000546001600160a01b0391908216330361034057600280549183166001600160a01b0319831681179091556040516000939092167f7686b07424ad3f0c4b2c80e05702e980b6918b4e7bd6c8eccfc5efd1bdd362828484a3f35b3461029457602036600319011261029457600054600435906001600160a01b0390811633141580611562575b80611554575b610340576113b282611a86565b600481101561032a576002146114e957816000526004602052604060002090600782019060019283928360ff19825416179055600060039081830191600484019460058501926002600687019601985b611434575b7fadbde318e7661b9816086d8c86df268d0c45567e65a7ecc6a9f0d69d509d90da60208b604051908152a1005b84548110156114e45781835416908261144d8288611943565b905490861b1c1661145e828a611943565b905490861b1c9261146f8388611943565b509061147b848b611943565b50948d54823b15610294576000946114ab8692604051998a9788968795632c8fe6ff60e11b875260048701611a49565b03925af18015610299576114ca575b6114c49150611857565b87611402565b6001600160401b038211610abb576114c4916040526114ba565b611407565b60405162461bcd60e51b815260206004820152603d60248201527f4d61726b657455706461746550726f706f7365723a3a63616e63656c3a20636160448201527f6e6e6f742063616e63656c2065786563757465642070726f706f73616c0000006064820152608490fd5b5080600254163314156113a5565b50806001541633141561139f565b346102945760203660031901126102945761158c600435611a86565b604051600482101561032a576020918152f35b3461029457600036600319011261029457602060405160148152f35b34610294576000366003190112610294576000546040516001600160a01b039091168152602090f35b34610294576000366003190112610294576002546040516001600160a01b039091168152602090f35b346102945760203660031901126102945760a090600435600052600460205260ff6040600020805490600180861b0360018201541660076002830154920154928552602085015260408401528181161515606084015260081c1615156080820152f35b600435906001600160a01b038216820361029457565b90815180825260208080930193019160005b8281106116a6575050505090565b83516001600160a01b031685529381019392810192600101611698565b90815180825260208080930193019160005b8281106116e3575050505090565b8351855293810193928101926001016116d5565b918091926000905b828210611717575011611710575050565b6000910152565b915080602091830151818601520182916116ff565b90602091611745815180928185528580860191016116f7565b601f01601f1916010190565b908082519081815260208091019281808460051b8301019501936000915b84831061177f5750505050505090565b909192939495848061179d600193601f198682030187528a5161172c565b980193019301919493929061176f565b601f909101601f19168101906001600160401b03821190821017610abb57604052565b6001600160401b038111610abb5760051b60200190565b6001600160401b038111610abb57601f01601f191660200190565b92919261180e826117e7565b9161181c60405193846117ad565b829481845281830111610294578281602093846000960137010152565b9080601f830112156102945781602061185493359101611802565b90565b60001981146118665760010190565b634e487b7160e01b600052601160045260246000fd5b81198111611866570190565b818110611893575050565b60008155600101611888565b918181106118ac57505050565b6118c29260005260206000209182019101611888565b565b90600182811c921680156118f4575b60208310146118de57565b634e487b7160e01b600052602260045260246000fd5b91607f16916118d3565b9190601f811161190d57505050565b6118c2926000526020600020906020601f840160051c83019310611939575b601f0160051c0190611888565b909150819061192c565b805482101561195b5760005260206000200190600090565b634e487b7160e01b600052603260045260246000fd5b9060009291805491611982836118c4565b9182825260019384811690816000146119e457506001146119a4575b50505050565b90919394506000526020928360002092846000945b8386106119d057505050500101903880808061199e565b8054858701830152940193859082016119b9565b9294505050602093945060ff191683830152151560051b0101903880808061199e565b95949390608093611a4493611a369260018060a01b03168952602089015260a0604089015260a088019061172c565b90868203606088015261172c565b930152565b95949390608093611a4493611a789260018060a01b03168952602089015260a0604089015260a0880190611971565b908682036060880152611971565b9081600554101580611bc6575b15611b68576000918252600460205260408220600781015460ff811615611ab8575050565b60081c60ff1615611aca575060029150565b600201546003546040516360d143f160e11b81529190602090839060049082906001600160a01b03165afa918215611b5d578492611b1f575b50611b0f92935061187c565b4210611b1a57600390565b600190565b9091506020813d8211611b55575b81611b3a602093836117ad565b81010312611b5157611b0f92935051908392611b03565b8380fd5b3d9150611b2d565b6040513d86823e3d90fd5b60405162461bcd60e51b815260206004820152603060248201527f4d61726b657455706461746550726f706f7365723a3a73746174653a20696e7660448201526f185b1a59081c1c9bdc1bdcd85b081a5960821b6064820152608490fd5b50811515611a9356fea26469706673582212202bf0d3714dcb4622c2efbe9f2c5995ab9b6b8757bd4f2c91e0b8f367d1d999d764736f6c634300080f00330000000000000000000000009825413dd3875e01b34451a7a7e066b2225a234e0000000000000000000000007e14050080306cd36b47de61ce604b3a1ec70c4e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000067174e10d3dee790fdab7ee0cbbab64093072108

Deployed Bytecode

0x608080604052600436101561001357600080fd5b60003560e01c908163013cf08b1461160d575080630592bdc8146115e45780630c340a24146115bb57806336e7048a1461159f5780633e4f49e61461157057806340e58ee5146113735780635eb80a1a146112ff57806399fef356146112e3578063a660aca51461126f578063c42cf535146111eb578063c7f758a814610fc2578063d33219b414610f99578063da35c66414610f7b578063da95691a1461037a578063fc473616146103515763fe0d94c1146100cf57600080fd5b602080600319360112610294576002546001600160a01b0391906004359083163303610340576100fe81611a86565b600481101561032a5760018091036102aa5781600052600483528060406000206007810161010061ff00198254161790556000956003968783016004840160058501926002600687019601965b61017c575b7fae9ee85932d40d4f1287c866c4c5058c820b056991417d122f4eb6e85b3e57a48a8a604051908152a1005b82548110156102a5578060008787878f876101fe6101de8f996101d781868f97828b6101cc9254169b6101bf826101b3818d611943565b905490871b1c9c611943565b905490851b1c1698611943565b9054911b1c97611943565b5097611943565b509854604051630825f38f60e01b8152998a978896879560048701611a49565b03925af180156102995761021d575b6102179150611857565b8761014b565b3d806000843e61022d81846117ad565b8201918b81840312610294578051906001600160401b03821161029457019180601f84011215610294578251610262816117e7565b9161027060405193846117ad565b8183528d828601011161029457610217938d8061028f940191016116f7565b61020d565b600080fd5b6040513d6000823e3d90fd5b610150565b60405162461bcd60e51b815260048101849052604c60248201527f4d61726b657455706461746550726f706f7365723a3a657865637574653a207060448201527f726f706f73616c2063616e206f6e6c792062652065786563757465642069662060648201526b1a5d081a5cc81c5d595d595960a21b608482015260a490fd5b634e487b7160e01b600052602160045260246000fd5b6040516282b42960e81b8152600490fd5b34610294576000366003190112610294576001546040516001600160a01b039091168152602090f35b346102945760a0366003190112610294576004356001600160401b03811161029457366023820112156102945780600401356103b5816117d0565b916103c360405193846117ad565b81835260208301906024829360051b8201019036821161029457602401915b818310610f5b5750506024359290506001600160401b038311610294573660238401121561029457826004013592610419846117d0565b9061042760405192836117ad565b848252602082016024819660051b8301019136831161029457602401905b828210610f4b57505060443590506001600160401b03811161029457366023820112156102945780600401359061047b826117d0565b9061048960405192836117ad565b82825260208201906024829460051b820101903682116102945760248101925b828410610f1d575050606435929150506001600160401b03821161029457366023830112156102945781600401356104e0816117d0565b926104ee60405194856117ad565b818452602084019160051b8101602401823682116102945760248301905b828210610eda5750506084359150506001600160401b03811161029457610537903690600401611839565b6002549094906001600160a01b03163303610340578651865181149081610ecf575b81610ec4575b5015610e4557865115610de4576014875111610d8757610580600554611857565b98896005558960005260046020526040600020988954610d2657600354604051630d48571f60e31b815290602090829060049082906001600160a01b03165afa801561029957600090610cf2575b6105d991504261187c565b9a8a5560018a0180546001600160a01b0319163317905560028a018b9055885190600160401b8211610abb5760038b01805483825561061a9184919061189f565b60038b0160005260206000206000915b838310610cc2575050885192915050600160401b8211610abb5760048a0180548382556106599184919061189f565b60048a0160005260206000206000915b838310610cac575050845192915050600160401b8211610abb5760058901548260058b0155808310610c2d575b5090600589016000526020600020916000905b828210610b50575050845192915050600160401b8211610abb5760068801548260068a0155808310610ad1575b5090600688016000526020600020916000905b8282106109d8578a8a7f697cc6583c21240df122b4bb0908b86837d2117538b014f206a13bee022b9a9e8b8b61078e8c6107808d6107728e60078a0161ffff1981541690556107648a54976107566040519a8b9a8b523360208c015260e060408c015260e08b0190611686565b9089820360608b01526116c3565b908782036080890152611751565b9085820360a0870152611751565b9083820360c085015261172c565b0390a160005b60038201548110156109cc576108096107b08260038501611943565b905460039190911b1c6001600160a01b03166108096107d28460048701611943565b90549060031b1c9161081c6107ea8660058901611943565b506108106107fb8860068b01611943565b509160405195868092611971565b03856117ad565b60405195868092611971565b6000602060018060a01b03600354166024866108486108568d6040519283918d8c8a8501978d89611a07565b03601f1981018352826117ad565b519020604051948593849263f2b0653760e01b845260048401525af190811561029957600091610991575b5061090157602092600060018060a01b0360035416926108b88a60405198899788968795633a66f90160e01b875260048701611a07565b03925af18015610299576108d6575b506108d190611857565b610794565b602090813d83116108fa575b6108ec81836117ad565b8101031261029457836108c7565b503d6108e2565b60405162461bcd60e51b815260206004820152605c60248201527f4d61726b657455706461746550726f706f7365723a3a71756575654f7252657660448201527f657274496e7465726e616c3a206964656e746963616c2070726f706f73616c2060648201527b616374696f6e20616c7265616479207175657565642061742065746160201b608482015260a490fd5b90506020813d6020116109c4575b816109ac602093836117ad565b81010312610294575180151581036102945788610881565b3d915061099f565b60208254604051908152f35b80518051906001600160401b038211610abb576109ff826109f988546118c4565b886118fe565b602090601f8311600114610a4b579282600194936020938695600092610a40575b5050600019600383901b1c191690841b1787555b019401910190926106e9565b015190503880610a20565b908660005260206000209160005b601f1985168110610aa3575083602093600196938796938794601f19811610610a8a575b505050811b018755610a34565b015160001960f88460031b161c19169055388080610a7d565b91926020600181928685015181550194019201610a59565b634e487b7160e01b600052604160045260246000fd5b600689016000526020600020908382015b8183018110610af25750506106d6565b80610aff600192546118c4565b80610b0c575b5001610ae2565b601f908181118414610b25575050600081555b8d610b05565b83610b4192846000526020600020920160051c82019101611888565b60006020812081835555610b1f565b80518051906001600160401b038211610abb57610b71826109f988546118c4565b602090601f8311600114610bbd579282600194936020938695600092610bb2575b5050600019600383901b1c191690841b1787555b019401910190926106a9565b015190503880610b92565b908660005260206000209160005b601f1985168110610c15575083602093600196938796938794601f19811610610bfc575b505050811b018755610ba6565b015160001960f88460031b161c19169055388080610bef565b91926020600181928685015181550194019201610bcb565b60058a016000526020600020908382015b8183018110610c4e575050610696565b80610c5b600192546118c4565b80610c68575b5001610c3e565b601f908181118414610c81575050600081555b8e610c61565b83610c9d92846000526020600020920160051c82019101611888565b60006020812081835555610c7b565b6001602082829351855501920192019190610669565b805182546001600160a01b0319166001600160a01b0391909116178255600192830192919091019060200161062a565b506020813d602011610d1e575b81610d0c602093836117ad565b81010312610294576105d990516105ce565b3d9150610cff565b60405162461bcd60e51b815260206004820152603360248201527f4d61726b657455706461746550726f706f7365723a3a70726f706f73653a20506044820152723937b837b9b0b624a21031b7b63634b9b4b7b760691b6064820152608490fd5b60405162461bcd60e51b815260206004820152602f60248201527f4d61726b657455706461746550726f706f7365723a3a70726f706f73653a207460448201526e6f6f206d616e7920616374696f6e7360881b6064820152608490fd5b60405162461bcd60e51b815260206004820152603360248201527f4d61726b657455706461746550726f706f7365723a3a70726f706f73653a206d6044820152727573742070726f7669646520616374696f6e7360681b6064820152608490fd5b60405162461bcd60e51b815260206004820152604b60248201527f4d61726b657455706461746550726f706f7365723a3a70726f706f73653a207060448201527f726f706f73616c2066756e6374696f6e20696e666f726d6174696f6e2061726960648201526a0e8f240dad2e6dac2e8c6d60ab1b608482015260a490fd5b90508451148a61055f565b845181149150610559565b81356001600160401b03811161029457366043828701011215610294576020918291610f129036908801602481013590604401611802565b81520191019061050c565b6001600160401b038435116102945760208091610f403660248835870101611839565b8152019301926104a9565b8135815260209182019101610445565b82356001600160a01b0381168103610294578152602092830192016103e2565b34610294576000366003190112610294576020600554604051908152f35b34610294576000366003190112610294576003546040516001600160a01b039091168152602090f35b346102945760203660031901126102945760043560005260046020526040600020805460018060a01b0360018301541691600281015490600381016004820160058301916007840154946040518083602082955493848152019060005260206000209260005b8181106111c957505061103d925003836117ad565b6040518084602082965493848152019060005260206000209260005b8181106111b057505061106e925003846117ad565b8354611079816117d0565b9461108760405196876117ad565b818652602086019060005260206000206000915b83831061118b575050505060068501546110b4816117d0565b956110c260405197886117ad565b818752600660208801910160005260206000206000915b83831061115f57505050509261112860ff959361111a61113694611144976040519c8d9c8d5260208d015260408c01526101208060608d01528b0190611686565b9089820360808b01526116c3565b9087820360a0890152611751565b9085820360c0870152611751565b91818116151560e085015260081c1615156101008301520390f35b60016020819260405161117d816111768189611971565b03826117ad565b8152019201920191906110d9565b6001602081926040516111a2816111768189611971565b81520192019201919061109b565b8454835260019485019488945060209093019201611059565b84546001600160a01b0316835260019485019487945060209093019201611028565b3461029457602036600319011261029457611204611670565b600054906001600160a01b0380831691338390036103405716801561125d578060009360018060a01b031916178355604051917fe7fbe5d154bee3a04d0155120b6990ed889fe54e7ba598e69d51ff35a4c43e5f8484a3f35b60405163e6c4247b60e01b8152600490fd5b3461029457602036600319011261029457611288611670565b6000546001600160a01b0391908216330361034057600180549183166001600160a01b0319831681179091556040516000939092167fb46f5867574bd122a6c216f65800495cedf15e873d0ff4efbc0fc0e6d03a811c8484a3f35b3461029457600036600319011261029457602060405160008152f35b3461029457602036600319011261029457611318611670565b6000546001600160a01b0391908216330361034057600280549183166001600160a01b0319831681179091556040516000939092167f7686b07424ad3f0c4b2c80e05702e980b6918b4e7bd6c8eccfc5efd1bdd362828484a3f35b3461029457602036600319011261029457600054600435906001600160a01b0390811633141580611562575b80611554575b610340576113b282611a86565b600481101561032a576002146114e957816000526004602052604060002090600782019060019283928360ff19825416179055600060039081830191600484019460058501926002600687019601985b611434575b7fadbde318e7661b9816086d8c86df268d0c45567e65a7ecc6a9f0d69d509d90da60208b604051908152a1005b84548110156114e45781835416908261144d8288611943565b905490861b1c1661145e828a611943565b905490861b1c9261146f8388611943565b509061147b848b611943565b50948d54823b15610294576000946114ab8692604051998a9788968795632c8fe6ff60e11b875260048701611a49565b03925af18015610299576114ca575b6114c49150611857565b87611402565b6001600160401b038211610abb576114c4916040526114ba565b611407565b60405162461bcd60e51b815260206004820152603d60248201527f4d61726b657455706461746550726f706f7365723a3a63616e63656c3a20636160448201527f6e6e6f742063616e63656c2065786563757465642070726f706f73616c0000006064820152608490fd5b5080600254163314156113a5565b50806001541633141561139f565b346102945760203660031901126102945761158c600435611a86565b604051600482101561032a576020918152f35b3461029457600036600319011261029457602060405160148152f35b34610294576000366003190112610294576000546040516001600160a01b039091168152602090f35b34610294576000366003190112610294576002546040516001600160a01b039091168152602090f35b346102945760203660031901126102945760a090600435600052600460205260ff6040600020805490600180861b0360018201541660076002830154920154928552602085015260408401528181161515606084015260081c1615156080820152f35b600435906001600160a01b038216820361029457565b90815180825260208080930193019160005b8281106116a6575050505090565b83516001600160a01b031685529381019392810192600101611698565b90815180825260208080930193019160005b8281106116e3575050505090565b8351855293810193928101926001016116d5565b918091926000905b828210611717575011611710575050565b6000910152565b915080602091830151818601520182916116ff565b90602091611745815180928185528580860191016116f7565b601f01601f1916010190565b908082519081815260208091019281808460051b8301019501936000915b84831061177f5750505050505090565b909192939495848061179d600193601f198682030187528a5161172c565b980193019301919493929061176f565b601f909101601f19168101906001600160401b03821190821017610abb57604052565b6001600160401b038111610abb5760051b60200190565b6001600160401b038111610abb57601f01601f191660200190565b92919261180e826117e7565b9161181c60405193846117ad565b829481845281830111610294578281602093846000960137010152565b9080601f830112156102945781602061185493359101611802565b90565b60001981146118665760010190565b634e487b7160e01b600052601160045260246000fd5b81198111611866570190565b818110611893575050565b60008155600101611888565b918181106118ac57505050565b6118c29260005260206000209182019101611888565b565b90600182811c921680156118f4575b60208310146118de57565b634e487b7160e01b600052602260045260246000fd5b91607f16916118d3565b9190601f811161190d57505050565b6118c2926000526020600020906020601f840160051c83019310611939575b601f0160051c0190611888565b909150819061192c565b805482101561195b5760005260206000200190600090565b634e487b7160e01b600052603260045260246000fd5b9060009291805491611982836118c4565b9182825260019384811690816000146119e457506001146119a4575b50505050565b90919394506000526020928360002092846000945b8386106119d057505050500101903880808061199e565b8054858701830152940193859082016119b9565b9294505050602093945060ff191683830152151560051b0101903880808061199e565b95949390608093611a4493611a369260018060a01b03168952602089015260a0604089015260a088019061172c565b90868203606088015261172c565b930152565b95949390608093611a4493611a789260018060a01b03168952602089015260a0604089015260a0880190611971565b908682036060880152611971565b9081600554101580611bc6575b15611b68576000918252600460205260408220600781015460ff811615611ab8575050565b60081c60ff1615611aca575060029150565b600201546003546040516360d143f160e11b81529190602090839060049082906001600160a01b03165afa918215611b5d578492611b1f575b50611b0f92935061187c565b4210611b1a57600390565b600190565b9091506020813d8211611b55575b81611b3a602093836117ad565b81010312611b5157611b0f92935051908392611b03565b8380fd5b3d9150611b2d565b6040513d86823e3d90fd5b60405162461bcd60e51b815260206004820152603060248201527f4d61726b657455706461746550726f706f7365723a3a73746174653a20696e7660448201526f185b1a59081c1c9bdc1bdcd85b081a5960821b6064820152608490fd5b50811515611a9356fea26469706673582212202bf0d3714dcb4622c2efbe9f2c5995ab9b6b8757bd4f2c91e0b8f367d1d999d764736f6c634300080f0033

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

0000000000000000000000009825413dd3875e01b34451a7a7e066b2225a234e0000000000000000000000007e14050080306cd36b47de61ce604b3a1ec70c4e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000067174e10d3dee790fdab7ee0cbbab64093072108

-----Decoded View---------------
Arg [0] : governor_ (address): 0x9825413dd3875E01B34451A7A7e066b2225a234E
Arg [1] : marketAdmin_ (address): 0x7e14050080306cd36b47DE61ce604b3a1EC70c4e
Arg [2] : proposalGuardian_ (address): 0x0000000000000000000000000000000000000000
Arg [3] : timelock_ (address): 0x67174e10D3DeE790FdaB7eE0cBbAb64093072108

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000009825413dd3875e01b34451a7a7e066b2225a234e
Arg [1] : 0000000000000000000000007e14050080306cd36b47de61ce604b3a1ec70c4e
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [3] : 00000000000000000000000067174e10d3dee790fdab7ee0cbbab64093072108


Block Transaction Gas Used Reward
view all blocks sequenced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ 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.