Source Code
Overview
ETH Balance
ETH Value
$0.00Latest 1 internal transaction
Advanced mode:
| Parent Transaction Hash | Block | From | To | |||
|---|---|---|---|---|---|---|
| 20930695 | 193 days ago | Contract Creation | 0 ETH |
Cross-Chain Transactions
Loading...
Loading
Contract Name:
MarketUpdateProposer
Compiler Version
v0.8.15+commit.e14f2714
Optimization Enabled:
Yes with 1 runs
Other Settings:
london EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// 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);
}{
"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
- No Contract Security Audit Submitted- Submit Audit Here
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"}]Contract Creation Code
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
Loading...
Loading
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
Multichain Portfolio | 35 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
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.