Source Code
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
Timelock
Compiler Version
v0.8.4+commit.c7e474f2
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: GPL-3.0-or-later
pragma solidity ^0.8.4;
import './../../node_modules/@openzeppelin/contracts/utils/math/SafeMath.sol';
import './../../node_modules/@openzeppelin/contracts/token/ERC777/IERC777Recipient.sol';
import './../../node_modules/@openzeppelin/contracts/utils/introspection/IERC1820Registry.sol';
// Forked from Compound
// See https://github.com/compound-finance/compound-protocol/blob/master/contracts/Timelock.sol
contract Timelock is IERC777Recipient {
using SafeMath for uint;
IERC1820Registry private _erc1820 = IERC1820Registry(0x1820a4B7618BdE71Dce8cdc73aAB6C95905faD24);
bytes32 constant private TOKENS_RECIPIENT_INTERFACE_HASH = keccak256("ERC777TokensRecipient");
event NewAdmin(address indexed newAdmin);
event NewPendingAdmin(address indexed newPendingAdmin);
event NewDelay(uint indexed newDelay);
event CancelTransaction(bytes32 indexed txHash, address indexed target, uint value, string signature, bytes data, uint eta);
event ExecuteTransaction(bytes32 indexed txHash, address indexed target, uint value, string signature, bytes data, uint eta);
event QueueTransaction(bytes32 indexed txHash, address indexed target, uint value, string signature, bytes data, uint eta);
uint public constant GRACE_PERIOD = 14 days;
uint public immutable MINIMUM_DELAY;
uint public constant MAXIMUM_DELAY = 30 days;
address public admin;
address public pendingAdmin;
uint public delay;
mapping (bytes32 => bool) public queuedTransactions;
constructor(address admin_, uint delay_, uint minDelay_) {
MINIMUM_DELAY = minDelay_;
require(delay_ >= minDelay_, "Timelock: Delay must exceed minimum delay.");
require(delay_ <= MAXIMUM_DELAY, "Timelock: Delay must not exceed maximum delay.");
require(admin_ != address(0), "Timelock: Admin must not be 0 address");
admin = admin_;
delay = delay_;
_erc1820.setInterfaceImplementer(address(this), TOKENS_RECIPIENT_INTERFACE_HASH, address(this));
}
receive() external payable { }
function setDelay(uint delay_) public {
require(msg.sender == address(this), "Timelock: Call must come from Timelock.");
require(delay_ >= MINIMUM_DELAY, "Timelock: Delay must exceed minimum delay.");
require(delay_ <= MAXIMUM_DELAY, "Timelock: Delay must not exceed maximum delay.");
delay = delay_;
emit NewDelay(delay);
}
function acceptAdmin() public {
require(msg.sender == pendingAdmin, "Timelock: Call must come from pendingAdmin.");
admin = msg.sender;
pendingAdmin = address(0);
emit NewAdmin(admin);
}
function setPendingAdmin(address pendingAdmin_) public {
require(msg.sender == address(this), "Timelock: Call must come from Timelock.");
pendingAdmin = pendingAdmin_;
emit NewPendingAdmin(pendingAdmin);
}
function queueTransaction(address target, uint value, string memory signature, bytes memory data, uint eta) public virtual returns (bytes32) {
require(msg.sender == admin, "Timelock: Call must come from admin.");
require(eta >= getBlockTimestamp().add(delay), "Timelock: Estimated execution block must satisfy delay.");
bytes32 txHash = getTxHash(target, value, signature, data, eta);
queuedTransactions[txHash] = true;
emit QueueTransaction(txHash, target, value, signature, data, eta);
return txHash;
}
function cancelTransaction(address target, uint value, string memory signature, bytes memory data, uint eta) public {
require(msg.sender == admin, "Timelock: Call must come from admin.");
_cancelTransaction(target, value, signature, data, eta);
}
function _cancelTransaction(address target, uint value, string memory signature, bytes memory data, uint eta) internal {
bytes32 txHash = getTxHash(target, value, signature, data, eta);
queuedTransactions[txHash] = false;
emit CancelTransaction(txHash, target, value, signature, data, eta);
}
function executeTransaction(address target, uint value, string memory signature, bytes memory data, uint eta) public virtual payable returns (bytes memory) {
require(msg.sender == admin, "Timelock: Call must come from admin.");
bytes32 txHash = getTxHash(target, value, signature, data, eta);
require(queuedTransactions[txHash], "Timelock: Transaction hasn't been queued.");
require(getBlockTimestamp() >= eta, "Timelock: Transaction hasn't surpassed time lock.");
require(getBlockTimestamp() <= eta.add(GRACE_PERIOD), "Timelock: Transaction is stale.");
queuedTransactions[txHash] = false;
bytes memory callData;
if (bytes(signature).length == 0) {
callData = data;
} else {
callData = abi.encodePacked(bytes4(keccak256(bytes(signature))), data);
}
// solhint-disable-next-line avoid-low-level-calls
(bool success, bytes memory returnData) = target.call{value: value}(callData); //solhint-disable avoid-call-value
require(success, "Timelock: Transaction execution reverted.");
emit ExecuteTransaction(txHash, target, value, signature, data, eta);
return returnData;
}
function getTxHash(address target, uint value, string memory signature, bytes memory data, uint eta) public pure returns (bytes32) {
return keccak256(abi.encode(target, value, signature, data, eta));
}
function getBlockTimestamp() internal view returns (uint) {
return block.timestamp;
}
function tokensReceived(
address operator,
address from,
address to,
uint256 amount,
bytes calldata userData,
bytes calldata operatorData
) override pure external {
return;
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/math/SafeMath.sol)
pragma solidity ^0.8.0;
// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.
/**
* @dev Wrappers over Solidity's arithmetic operations.
*
* NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler
* now has built in overflow checking.
*/
library SafeMath {
/**
* @dev Returns the addition of two unsigned integers, with an overflow flag.
*
* _Available since v3.4._
*/
function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
uint256 c = a + b;
if (c < a) return (false, 0);
return (true, c);
}
}
/**
* @dev Returns the substraction of two unsigned integers, with an overflow flag.
*
* _Available since v3.4._
*/
function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
if (b > a) return (false, 0);
return (true, a - b);
}
}
/**
* @dev Returns the multiplication of two unsigned integers, with an overflow flag.
*
* _Available since v3.4._
*/
function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
// Gas optimization: this is cheaper than requiring 'a' not being zero, but the
// benefit is lost if 'b' is also tested.
// See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
if (a == 0) return (true, 0);
uint256 c = a * b;
if (c / a != b) return (false, 0);
return (true, c);
}
}
/**
* @dev Returns the division of two unsigned integers, with a division by zero flag.
*
* _Available since v3.4._
*/
function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
if (b == 0) return (false, 0);
return (true, a / b);
}
}
/**
* @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
*
* _Available since v3.4._
*/
function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
if (b == 0) return (false, 0);
return (true, a % b);
}
}
/**
* @dev Returns the addition of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `+` operator.
*
* Requirements:
*
* - Addition cannot overflow.
*/
function add(uint256 a, uint256 b) internal pure returns (uint256) {
return a + b;
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting on
* overflow (when the result is negative).
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
*
* - Subtraction cannot overflow.
*/
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
return a - b;
}
/**
* @dev Returns the multiplication of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `*` operator.
*
* Requirements:
*
* - Multiplication cannot overflow.
*/
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
return a * b;
}
/**
* @dev Returns the integer division of two unsigned integers, reverting on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator.
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function div(uint256 a, uint256 b) internal pure returns (uint256) {
return a / b;
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* reverting when dividing by zero.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function mod(uint256 a, uint256 b) internal pure returns (uint256) {
return a % b;
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting with custom message on
* overflow (when the result is negative).
*
* CAUTION: This function is deprecated because it requires allocating memory for the error
* message unnecessarily. For custom revert reasons use {trySub}.
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
*
* - Subtraction cannot overflow.
*/
function sub(
uint256 a,
uint256 b,
string memory errorMessage
) internal pure returns (uint256) {
unchecked {
require(b <= a, errorMessage);
return a - b;
}
}
/**
* @dev Returns the integer division of two unsigned integers, reverting with custom message on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator. Note: this function uses a
* `revert` opcode (which leaves remaining gas untouched) while Solidity
* uses an invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function div(
uint256 a,
uint256 b,
string memory errorMessage
) internal pure returns (uint256) {
unchecked {
require(b > 0, errorMessage);
return a / b;
}
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* reverting with custom message when dividing by zero.
*
* CAUTION: This function is deprecated because it requires allocating memory for the error
* message unnecessarily. For custom revert reasons use {tryMod}.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function mod(
uint256 a,
uint256 b,
string memory errorMessage
) internal pure returns (uint256) {
unchecked {
require(b > 0, errorMessage);
return a % b;
}
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC1820Registry.sol)
pragma solidity ^0.8.0;
/**
* @dev Interface of the global ERC1820 Registry, as defined in the
* https://eips.ethereum.org/EIPS/eip-1820[EIP]. Accounts may register
* implementers for interfaces in this registry, as well as query support.
*
* Implementers may be shared by multiple accounts, and can also implement more
* than a single interface for each account. Contracts can implement interfaces
* for themselves, but externally-owned accounts (EOA) must delegate this to a
* contract.
*
* {IERC165} interfaces can also be queried via the registry.
*
* For an in-depth explanation and source code analysis, see the EIP text.
*/
interface IERC1820Registry {
/**
* @dev Sets `newManager` as the manager for `account`. A manager of an
* account is able to set interface implementers for it.
*
* By default, each account is its own manager. Passing a value of `0x0` in
* `newManager` will reset the manager to this initial state.
*
* Emits a {ManagerChanged} event.
*
* Requirements:
*
* - the caller must be the current manager for `account`.
*/
function setManager(address account, address newManager) external;
/**
* @dev Returns the manager for `account`.
*
* See {setManager}.
*/
function getManager(address account) external view returns (address);
/**
* @dev Sets the `implementer` contract as ``account``'s implementer for
* `interfaceHash`.
*
* `account` being the zero address is an alias for the caller's address.
* The zero address can also be used in `implementer` to remove an old one.
*
* See {interfaceHash} to learn how these are created.
*
* Emits an {InterfaceImplementerSet} event.
*
* Requirements:
*
* - the caller must be the current manager for `account`.
* - `interfaceHash` must not be an {IERC165} interface id (i.e. it must not
* end in 28 zeroes).
* - `implementer` must implement {IERC1820Implementer} and return true when
* queried for support, unless `implementer` is the caller. See
* {IERC1820Implementer-canImplementInterfaceForAddress}.
*/
function setInterfaceImplementer(
address account,
bytes32 _interfaceHash,
address implementer
) external;
/**
* @dev Returns the implementer of `interfaceHash` for `account`. If no such
* implementer is registered, returns the zero address.
*
* If `interfaceHash` is an {IERC165} interface id (i.e. it ends with 28
* zeroes), `account` will be queried for support of it.
*
* `account` being the zero address is an alias for the caller's address.
*/
function getInterfaceImplementer(address account, bytes32 _interfaceHash) external view returns (address);
/**
* @dev Returns the interface hash for an `interfaceName`, as defined in the
* corresponding
* https://eips.ethereum.org/EIPS/eip-1820#interface-name[section of the EIP].
*/
function interfaceHash(string calldata interfaceName) external pure returns (bytes32);
/**
* @notice Updates the cache with whether the contract implements an ERC165 interface or not.
* @param account Address of the contract for which to update the cache.
* @param interfaceId ERC165 interface for which to update the cache.
*/
function updateERC165Cache(address account, bytes4 interfaceId) external;
/**
* @notice Checks whether a contract implements an ERC165 interface or not.
* If the result is not cached a direct lookup on the contract address is performed.
* If the result is not cached or the cached value is out-of-date, the cache MUST be updated manually by calling
* {updateERC165Cache} with the contract address.
* @param account Address of the contract to check.
* @param interfaceId ERC165 interface to check.
* @return True if `account` implements `interfaceId`, false otherwise.
*/
function implementsERC165Interface(address account, bytes4 interfaceId) external view returns (bool);
/**
* @notice Checks whether a contract implements an ERC165 interface or not without using nor updating the cache.
* @param account Address of the contract to check.
* @param interfaceId ERC165 interface to check.
* @return True if `account` implements `interfaceId`, false otherwise.
*/
function implementsERC165InterfaceNoCache(address account, bytes4 interfaceId) external view returns (bool);
event InterfaceImplementerSet(address indexed account, bytes32 indexed interfaceHash, address indexed implementer);
event ManagerChanged(address indexed account, address indexed newManager);
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC777/IERC777Recipient.sol)
pragma solidity ^0.8.0;
/**
* @dev Interface of the ERC777TokensRecipient standard as defined in the EIP.
*
* Accounts can be notified of {IERC777} tokens being sent to them by having a
* contract implement this interface (contract holders can be their own
* implementer) and registering it on the
* https://eips.ethereum.org/EIPS/eip-1820[ERC1820 global registry].
*
* See {IERC1820Registry} and {ERC1820Implementer}.
*/
interface IERC777Recipient {
/**
* @dev Called by an {IERC777} token contract whenever tokens are being
* moved or created into a registered account (`to`). The type of operation
* is conveyed by `from` being the zero address or not.
*
* This call occurs _after_ the token contract's state is updated, so
* {IERC777-balanceOf}, etc., can be used to query the post-operation state.
*
* This function may revert to prevent the operation from being executed.
*/
function tokensReceived(
address operator,
address from,
address to,
uint256 amount,
bytes calldata userData,
bytes calldata operatorData
) external;
}{
"remappings": [],
"optimizer": {
"enabled": false,
"runs": 200
},
"evmVersion": "istanbul",
"libraries": {},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"admin_","type":"address"},{"internalType":"uint256","name":"delay_","type":"uint256"},{"internalType":"uint256","name":"minDelay_","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"txHash","type":"bytes32"},{"indexed":true,"internalType":"address","name":"target","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"string","name":"signature","type":"string"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"},{"indexed":false,"internalType":"uint256","name":"eta","type":"uint256"}],"name":"CancelTransaction","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"txHash","type":"bytes32"},{"indexed":true,"internalType":"address","name":"target","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"string","name":"signature","type":"string"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"},{"indexed":false,"internalType":"uint256","name":"eta","type":"uint256"}],"name":"ExecuteTransaction","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAdmin","type":"address"}],"name":"NewAdmin","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newDelay","type":"uint256"}],"name":"NewDelay","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newPendingAdmin","type":"address"}],"name":"NewPendingAdmin","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"txHash","type":"bytes32"},{"indexed":true,"internalType":"address","name":"target","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"string","name":"signature","type":"string"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"},{"indexed":false,"internalType":"uint256","name":"eta","type":"uint256"}],"name":"QueueTransaction","type":"event"},{"inputs":[],"name":"GRACE_PERIOD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAXIMUM_DELAY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINIMUM_DELAY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acceptAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"admin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"string","name":"signature","type":"string"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"eta","type":"uint256"}],"name":"cancelTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"delay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"string","name":"signature","type":"string"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"eta","type":"uint256"}],"name":"executeTransaction","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"string","name":"signature","type":"string"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"eta","type":"uint256"}],"name":"getTxHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"pendingAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"string","name":"signature","type":"string"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"eta","type":"uint256"}],"name":"queueTransaction","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"queuedTransactions","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"delay_","type":"uint256"}],"name":"setDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pendingAdmin_","type":"address"}],"name":"setPendingAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"},{"internalType":"bytes","name":"operatorData","type":"bytes"}],"name":"tokensReceived","outputs":[],"stateMutability":"pure","type":"function"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
60a0604052731820a4b7618bde71dce8cdc73aab6c95905fad246000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200006557600080fd5b50604051620022ba380380620022ba83398181016040528101906200008b9190620002c7565b806080818152505080821015620000d9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620000d09062000435565b60405180910390fd5b62278d0082111562000122576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200011990620003f1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141562000195576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200018c9062000413565b60405180910390fd5b82600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508160038190555060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166329965a1d307fb281fc8c12954d22544db45de3159a39272895b169a852b314f9cc762e44c53b306040518463ffffffff1660e01b81526004016200025c93929190620003b4565b600060405180830381600087803b1580156200027757600080fd5b505af11580156200028c573d6000803e3d6000fd5b50505050505050620005d1565b600081519050620002aa816200059d565b92915050565b600081519050620002c181620005b7565b92915050565b600080600060608486031215620002dd57600080fd5b6000620002ed8682870162000299565b93505060206200030086828701620002b0565b92505060406200031386828701620002b0565b9150509250925092565b620003288162000468565b82525050565b62000339816200047c565b82525050565b60006200034e602e8362000457565b91506200035b82620004b0565b604082019050919050565b60006200037560258362000457565b91506200038282620004ff565b604082019050919050565b60006200039c602a8362000457565b9150620003a9826200054e565b604082019050919050565b6000606082019050620003cb60008301866200031d565b620003da60208301856200032e565b620003e960408301846200031d565b949350505050565b600060208201905081810360008301526200040c816200033f565b9050919050565b600060208201905081810360008301526200042e8162000366565b9050919050565b6000602082019050818103600083015262000450816200038d565b9050919050565b600082825260208201905092915050565b6000620004758262000486565b9050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b7f54696d656c6f636b3a2044656c6179206d757374206e6f74206578636565642060008201527f6d6178696d756d2064656c61792e000000000000000000000000000000000000602082015250565b7f54696d656c6f636b3a2041646d696e206d757374206e6f74206265203020616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f54696d656c6f636b3a2044656c6179206d75737420657863656564206d696e6960008201527f6d756d2064656c61792e00000000000000000000000000000000000000000000602082015250565b620005a88162000468565b8114620005b457600080fd5b50565b620005c281620004a6565b8114620005ce57600080fd5b50565b608051611cc6620005f460003960008181610c070152610ca00152611cc66000f3fe6080604052600436106100eb5760003560e01c8063591fcdfe1161008a578063c1a287e211610059578063c1a287e2146102df578063e177246e1461030a578063f2b0653714610333578063f851a44014610370576100f2565b8063591fcdfe146102355780636a42b8f81461025e5780637d645fab14610289578063b1b43ae5146102b4576100f2565b80630e18b681116100c65780630e18b6811461018d57806326782247146101a45780633a66f901146101cf5780634dd18bf51461020c576100f2565b806223de29146100f757806304a71576146101205780630825f38f1461015d576100f2565b366100f257005b600080fd5b34801561010357600080fd5b5061011e60048036038101906101199190611000565b61039b565b005b34801561012c57600080fd5b50610147600480360381019061014291906110c3565b6103a5565b60405161015491906114e6565b60405180910390f35b610177600480360381019061017291906110c3565b6103e1565b6040516101849190611501565b60405180910390f35b34801561019957600080fd5b506101a261070e565b005b3480156101b057600080fd5b506101b9610888565b6040516101c6919061144f565b60405180910390f35b3480156101db57600080fd5b506101f660048036038101906101f191906110c3565b6108ae565b60405161020391906114e6565b60405180910390f35b34801561021857600080fd5b50610233600480360381019061022e9190610fd7565b610a3d565b005b34801561024157600080fd5b5061025c600480360381019061025791906110c3565b610b54565b005b34801561026a57600080fd5b50610273610bf8565b6040516102809190611663565b60405180910390f35b34801561029557600080fd5b5061029e610bfe565b6040516102ab9190611663565b60405180910390f35b3480156102c057600080fd5b506102c9610c05565b6040516102d69190611663565b60405180910390f35b3480156102eb57600080fd5b506102f4610c29565b6040516103019190611663565b60405180910390f35b34801561031657600080fd5b50610331600480360381019061032c9190611193565b610c30565b005b34801561033f57600080fd5b5061035a6004803603810190610355919061116a565b610d80565b60405161036791906114cb565b60405180910390f35b34801561037c57600080fd5b50610385610da0565b604051610392919061144f565b60405180910390f35b5050505050505050565b600085858585856040516020016103c095949392919061146a565b60405160208183030381529060405280519060200120905095945050505050565b6060600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610473576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161046a906115a3565b60405180910390fd5b600061048287878787876103a5565b90506004600082815260200190815260200160002060009054906101000a900460ff166104e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104db90611583565b60405180910390fd5b826104ed610dc6565b101561052e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161052590611623565b60405180910390fd5b6105446212750084610dce90919063ffffffff16565b61054c610dc6565b111561058d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161058490611603565b60405180910390fd5b60006004600083815260200190815260200160002060006101000a81548160ff02191690831515021790555060606000865114156105cd578490506105f9565b8580519060200120856040516020016105e7929190611410565b60405160208183030381529060405290505b6000808973ffffffffffffffffffffffffffffffffffffffff1689846040516106229190611438565b60006040518083038185875af1925050503d806000811461065f576040519150601f19603f3d011682016040523d82523d6000602084013e610664565b606091505b5091509150816106a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a0906115e3565b60405180910390fd5b8973ffffffffffffffffffffffffffffffffffffffff16847fa560e3198060a2f10670c1ec5b403077ea6ae93ca8de1c32b451dc1a943cd6e78b8b8b8b6040516106f6949392919061167e565b60405180910390a38094505050505095945050505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461079e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610795906115c3565b60405180910390fd5b33600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f71614071b88dee5e0b2ae578a9dd7b2ebbe9ae832ba419dc0242cd065a290b6c60405160405180910390a2565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610940576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610937906115a3565b60405180910390fd5b61095c60035461094e610dc6565b610dce90919063ffffffff16565b82101561099e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099590611563565b60405180910390fd5b60006109ad87878787876103a5565b905060016004600083815260200190815260200160002060006101000a81548160ff0219169083151502179055508673ffffffffffffffffffffffffffffffffffffffff16817f76e2796dc3a81d57b0e8504b647febcbeeb5f4af818e164f11eef8131a6a763f88888888604051610a28949392919061167e565b60405180910390a38091505095945050505050565b3073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610aab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa290611543565b60405180910390fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f69d78e38a01985fbb1462961809b4b2d65531bc93b2b94037f3334b82ca4a75660405160405180910390a250565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610be4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bdb906115a3565b60405180910390fd5b610bf18585858585610de4565b5050505050565b60035481565b62278d0081565b7f000000000000000000000000000000000000000000000000000000000000000081565b6212750081565b3073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9590611543565b60405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000811015610d01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf890611643565b60405180910390fd5b62278d00811115610d47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3e90611523565b60405180910390fd5b806003819055506003547f948b1f6a42ee138b7e34058ba85a37f716d55ff25ff05a763f15bed6a04c8d2c60405160405180910390a250565b60046020528060005260406000206000915054906101000a900460ff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600042905090565b60008183610ddc919061179b565b905092915050565b6000610df386868686866103a5565b905060006004600083815260200190815260200160002060006101000a81548160ff0219169083151502179055508573ffffffffffffffffffffffffffffffffffffffff16817f2fffc091a501fd91bfbff27141450d3acb40fb8e6d8382b243ec7a812a3aaf8787878787604051610e6e949392919061167e565b60405180910390a3505050505050565b6000610e91610e8c846116f6565b6116d1565b905082815260208101848484011115610ea957600080fd5b610eb484828561186f565b509392505050565b6000610ecf610eca84611727565b6116d1565b905082815260208101848484011115610ee757600080fd5b610ef284828561186f565b509392505050565b600081359050610f0981611c4b565b92915050565b600081359050610f1e81611c62565b92915050565b60008083601f840112610f3657600080fd5b8235905067ffffffffffffffff811115610f4f57600080fd5b602083019150836001820283011115610f6757600080fd5b9250929050565b600082601f830112610f7f57600080fd5b8135610f8f848260208601610e7e565b91505092915050565b600082601f830112610fa957600080fd5b8135610fb9848260208601610ebc565b91505092915050565b600081359050610fd181611c79565b92915050565b600060208284031215610fe957600080fd5b6000610ff784828501610efa565b91505092915050565b60008060008060008060008060c0898b03121561101c57600080fd5b600061102a8b828c01610efa565b985050602061103b8b828c01610efa565b975050604061104c8b828c01610efa565b965050606061105d8b828c01610fc2565b955050608089013567ffffffffffffffff81111561107a57600080fd5b6110868b828c01610f24565b945094505060a089013567ffffffffffffffff8111156110a557600080fd5b6110b18b828c01610f24565b92509250509295985092959890939650565b600080600080600060a086880312156110db57600080fd5b60006110e988828901610efa565b95505060206110fa88828901610fc2565b945050604086013567ffffffffffffffff81111561111757600080fd5b61112388828901610f98565b935050606086013567ffffffffffffffff81111561114057600080fd5b61114c88828901610f6e565b925050608061115d88828901610fc2565b9150509295509295909350565b60006020828403121561117c57600080fd5b600061118a84828501610f0f565b91505092915050565b6000602082840312156111a557600080fd5b60006111b384828501610fc2565b91505092915050565b6111c5816117f1565b82525050565b6111d481611803565b82525050565b6111e38161180f565b82525050565b6111fa6111f582611819565b6118e2565b82525050565b600061120b82611758565b611215818561176e565b935061122581856020860161187e565b61122e8161194a565b840191505092915050565b600061124482611758565b61124e818561177f565b935061125e81856020860161187e565b80840191505092915050565b600061127582611763565b61127f818561178a565b935061128f81856020860161187e565b6112988161194a565b840191505092915050565b60006112b0602e8361178a565b91506112bb8261195b565b604082019050919050565b60006112d360278361178a565b91506112de826119aa565b604082019050919050565b60006112f660378361178a565b9150611301826119f9565b604082019050919050565b600061131960298361178a565b915061132482611a48565b604082019050919050565b600061133c60248361178a565b915061134782611a97565b604082019050919050565b600061135f602b8361178a565b915061136a82611ae6565b604082019050919050565b600061138260298361178a565b915061138d82611b35565b604082019050919050565b60006113a5601f8361178a565b91506113b082611b84565b602082019050919050565b60006113c860318361178a565b91506113d382611bad565b604082019050919050565b60006113eb602a8361178a565b91506113f682611bfc565b604082019050919050565b61140a81611865565b82525050565b600061141c82856111e9565b60048201915061142c8284611239565b91508190509392505050565b60006114448284611239565b915081905092915050565b600060208201905061146460008301846111bc565b92915050565b600060a08201905061147f60008301886111bc565b61148c6020830187611401565b818103604083015261149e818661126a565b905081810360608301526114b28185611200565b90506114c16080830184611401565b9695505050505050565b60006020820190506114e060008301846111cb565b92915050565b60006020820190506114fb60008301846111da565b92915050565b6000602082019050818103600083015261151b8184611200565b905092915050565b6000602082019050818103600083015261153c816112a3565b9050919050565b6000602082019050818103600083015261155c816112c6565b9050919050565b6000602082019050818103600083015261157c816112e9565b9050919050565b6000602082019050818103600083015261159c8161130c565b9050919050565b600060208201905081810360008301526115bc8161132f565b9050919050565b600060208201905081810360008301526115dc81611352565b9050919050565b600060208201905081810360008301526115fc81611375565b9050919050565b6000602082019050818103600083015261161c81611398565b9050919050565b6000602082019050818103600083015261163c816113bb565b9050919050565b6000602082019050818103600083015261165c816113de565b9050919050565b60006020820190506116786000830184611401565b92915050565b60006080820190506116936000830187611401565b81810360208301526116a5818661126a565b905081810360408301526116b98185611200565b90506116c86060830184611401565b95945050505050565b60006116db6116ec565b90506116e782826118b1565b919050565b6000604051905090565b600067ffffffffffffffff8211156117115761171061191b565b5b61171a8261194a565b9050602081019050919050565b600067ffffffffffffffff8211156117425761174161191b565b5b61174b8261194a565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b60006117a682611865565b91506117b183611865565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156117e6576117e56118ec565b5b828201905092915050565b60006117fc82611845565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561189c578082015181840152602081019050611881565b838111156118ab576000848401525b50505050565b6118ba8261194a565b810181811067ffffffffffffffff821117156118d9576118d861191b565b5b80604052505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f54696d656c6f636b3a2044656c6179206d757374206e6f74206578636565642060008201527f6d6178696d756d2064656c61792e000000000000000000000000000000000000602082015250565b7f54696d656c6f636b3a2043616c6c206d75737420636f6d652066726f6d20546960008201527f6d656c6f636b2e00000000000000000000000000000000000000000000000000602082015250565b7f54696d656c6f636b3a20457374696d6174656420657865637574696f6e20626c60008201527f6f636b206d75737420736174697366792064656c61792e000000000000000000602082015250565b7f54696d656c6f636b3a205472616e73616374696f6e206861736e27742062656560008201527f6e207175657565642e0000000000000000000000000000000000000000000000602082015250565b7f54696d656c6f636b3a2043616c6c206d75737420636f6d652066726f6d20616460008201527f6d696e2e00000000000000000000000000000000000000000000000000000000602082015250565b7f54696d656c6f636b3a2043616c6c206d75737420636f6d652066726f6d20706560008201527f6e64696e6741646d696e2e000000000000000000000000000000000000000000602082015250565b7f54696d656c6f636b3a205472616e73616374696f6e20657865637574696f6e2060008201527f72657665727465642e0000000000000000000000000000000000000000000000602082015250565b7f54696d656c6f636b3a205472616e73616374696f6e206973207374616c652e00600082015250565b7f54696d656c6f636b3a205472616e73616374696f6e206861736e27742073757260008201527f7061737365642074696d65206c6f636b2e000000000000000000000000000000602082015250565b7f54696d656c6f636b3a2044656c6179206d75737420657863656564206d696e6960008201527f6d756d2064656c61792e00000000000000000000000000000000000000000000602082015250565b611c54816117f1565b8114611c5f57600080fd5b50565b611c6b8161180f565b8114611c7657600080fd5b50565b611c8281611865565b8114611c8d57600080fd5b5056fea264697066735822122045fe7a0a7cf4d3ba4af18b8204fe0e89df246ad52656a0dfcb1b374e07a6421364736f6c63430008040033000000000000000000000000a42f6fb68607048dde54fcd53d2195cc8ca5f48600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106100eb5760003560e01c8063591fcdfe1161008a578063c1a287e211610059578063c1a287e2146102df578063e177246e1461030a578063f2b0653714610333578063f851a44014610370576100f2565b8063591fcdfe146102355780636a42b8f81461025e5780637d645fab14610289578063b1b43ae5146102b4576100f2565b80630e18b681116100c65780630e18b6811461018d57806326782247146101a45780633a66f901146101cf5780634dd18bf51461020c576100f2565b806223de29146100f757806304a71576146101205780630825f38f1461015d576100f2565b366100f257005b600080fd5b34801561010357600080fd5b5061011e60048036038101906101199190611000565b61039b565b005b34801561012c57600080fd5b50610147600480360381019061014291906110c3565b6103a5565b60405161015491906114e6565b60405180910390f35b610177600480360381019061017291906110c3565b6103e1565b6040516101849190611501565b60405180910390f35b34801561019957600080fd5b506101a261070e565b005b3480156101b057600080fd5b506101b9610888565b6040516101c6919061144f565b60405180910390f35b3480156101db57600080fd5b506101f660048036038101906101f191906110c3565b6108ae565b60405161020391906114e6565b60405180910390f35b34801561021857600080fd5b50610233600480360381019061022e9190610fd7565b610a3d565b005b34801561024157600080fd5b5061025c600480360381019061025791906110c3565b610b54565b005b34801561026a57600080fd5b50610273610bf8565b6040516102809190611663565b60405180910390f35b34801561029557600080fd5b5061029e610bfe565b6040516102ab9190611663565b60405180910390f35b3480156102c057600080fd5b506102c9610c05565b6040516102d69190611663565b60405180910390f35b3480156102eb57600080fd5b506102f4610c29565b6040516103019190611663565b60405180910390f35b34801561031657600080fd5b50610331600480360381019061032c9190611193565b610c30565b005b34801561033f57600080fd5b5061035a6004803603810190610355919061116a565b610d80565b60405161036791906114cb565b60405180910390f35b34801561037c57600080fd5b50610385610da0565b604051610392919061144f565b60405180910390f35b5050505050505050565b600085858585856040516020016103c095949392919061146a565b60405160208183030381529060405280519060200120905095945050505050565b6060600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610473576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161046a906115a3565b60405180910390fd5b600061048287878787876103a5565b90506004600082815260200190815260200160002060009054906101000a900460ff166104e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104db90611583565b60405180910390fd5b826104ed610dc6565b101561052e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161052590611623565b60405180910390fd5b6105446212750084610dce90919063ffffffff16565b61054c610dc6565b111561058d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161058490611603565b60405180910390fd5b60006004600083815260200190815260200160002060006101000a81548160ff02191690831515021790555060606000865114156105cd578490506105f9565b8580519060200120856040516020016105e7929190611410565b60405160208183030381529060405290505b6000808973ffffffffffffffffffffffffffffffffffffffff1689846040516106229190611438565b60006040518083038185875af1925050503d806000811461065f576040519150601f19603f3d011682016040523d82523d6000602084013e610664565b606091505b5091509150816106a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a0906115e3565b60405180910390fd5b8973ffffffffffffffffffffffffffffffffffffffff16847fa560e3198060a2f10670c1ec5b403077ea6ae93ca8de1c32b451dc1a943cd6e78b8b8b8b6040516106f6949392919061167e565b60405180910390a38094505050505095945050505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461079e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610795906115c3565b60405180910390fd5b33600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f71614071b88dee5e0b2ae578a9dd7b2ebbe9ae832ba419dc0242cd065a290b6c60405160405180910390a2565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610940576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610937906115a3565b60405180910390fd5b61095c60035461094e610dc6565b610dce90919063ffffffff16565b82101561099e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099590611563565b60405180910390fd5b60006109ad87878787876103a5565b905060016004600083815260200190815260200160002060006101000a81548160ff0219169083151502179055508673ffffffffffffffffffffffffffffffffffffffff16817f76e2796dc3a81d57b0e8504b647febcbeeb5f4af818e164f11eef8131a6a763f88888888604051610a28949392919061167e565b60405180910390a38091505095945050505050565b3073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610aab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa290611543565b60405180910390fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f69d78e38a01985fbb1462961809b4b2d65531bc93b2b94037f3334b82ca4a75660405160405180910390a250565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610be4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bdb906115a3565b60405180910390fd5b610bf18585858585610de4565b5050505050565b60035481565b62278d0081565b7f000000000000000000000000000000000000000000000000000000000000000081565b6212750081565b3073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9590611543565b60405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000811015610d01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf890611643565b60405180910390fd5b62278d00811115610d47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3e90611523565b60405180910390fd5b806003819055506003547f948b1f6a42ee138b7e34058ba85a37f716d55ff25ff05a763f15bed6a04c8d2c60405160405180910390a250565b60046020528060005260406000206000915054906101000a900460ff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600042905090565b60008183610ddc919061179b565b905092915050565b6000610df386868686866103a5565b905060006004600083815260200190815260200160002060006101000a81548160ff0219169083151502179055508573ffffffffffffffffffffffffffffffffffffffff16817f2fffc091a501fd91bfbff27141450d3acb40fb8e6d8382b243ec7a812a3aaf8787878787604051610e6e949392919061167e565b60405180910390a3505050505050565b6000610e91610e8c846116f6565b6116d1565b905082815260208101848484011115610ea957600080fd5b610eb484828561186f565b509392505050565b6000610ecf610eca84611727565b6116d1565b905082815260208101848484011115610ee757600080fd5b610ef284828561186f565b509392505050565b600081359050610f0981611c4b565b92915050565b600081359050610f1e81611c62565b92915050565b60008083601f840112610f3657600080fd5b8235905067ffffffffffffffff811115610f4f57600080fd5b602083019150836001820283011115610f6757600080fd5b9250929050565b600082601f830112610f7f57600080fd5b8135610f8f848260208601610e7e565b91505092915050565b600082601f830112610fa957600080fd5b8135610fb9848260208601610ebc565b91505092915050565b600081359050610fd181611c79565b92915050565b600060208284031215610fe957600080fd5b6000610ff784828501610efa565b91505092915050565b60008060008060008060008060c0898b03121561101c57600080fd5b600061102a8b828c01610efa565b985050602061103b8b828c01610efa565b975050604061104c8b828c01610efa565b965050606061105d8b828c01610fc2565b955050608089013567ffffffffffffffff81111561107a57600080fd5b6110868b828c01610f24565b945094505060a089013567ffffffffffffffff8111156110a557600080fd5b6110b18b828c01610f24565b92509250509295985092959890939650565b600080600080600060a086880312156110db57600080fd5b60006110e988828901610efa565b95505060206110fa88828901610fc2565b945050604086013567ffffffffffffffff81111561111757600080fd5b61112388828901610f98565b935050606086013567ffffffffffffffff81111561114057600080fd5b61114c88828901610f6e565b925050608061115d88828901610fc2565b9150509295509295909350565b60006020828403121561117c57600080fd5b600061118a84828501610f0f565b91505092915050565b6000602082840312156111a557600080fd5b60006111b384828501610fc2565b91505092915050565b6111c5816117f1565b82525050565b6111d481611803565b82525050565b6111e38161180f565b82525050565b6111fa6111f582611819565b6118e2565b82525050565b600061120b82611758565b611215818561176e565b935061122581856020860161187e565b61122e8161194a565b840191505092915050565b600061124482611758565b61124e818561177f565b935061125e81856020860161187e565b80840191505092915050565b600061127582611763565b61127f818561178a565b935061128f81856020860161187e565b6112988161194a565b840191505092915050565b60006112b0602e8361178a565b91506112bb8261195b565b604082019050919050565b60006112d360278361178a565b91506112de826119aa565b604082019050919050565b60006112f660378361178a565b9150611301826119f9565b604082019050919050565b600061131960298361178a565b915061132482611a48565b604082019050919050565b600061133c60248361178a565b915061134782611a97565b604082019050919050565b600061135f602b8361178a565b915061136a82611ae6565b604082019050919050565b600061138260298361178a565b915061138d82611b35565b604082019050919050565b60006113a5601f8361178a565b91506113b082611b84565b602082019050919050565b60006113c860318361178a565b91506113d382611bad565b604082019050919050565b60006113eb602a8361178a565b91506113f682611bfc565b604082019050919050565b61140a81611865565b82525050565b600061141c82856111e9565b60048201915061142c8284611239565b91508190509392505050565b60006114448284611239565b915081905092915050565b600060208201905061146460008301846111bc565b92915050565b600060a08201905061147f60008301886111bc565b61148c6020830187611401565b818103604083015261149e818661126a565b905081810360608301526114b28185611200565b90506114c16080830184611401565b9695505050505050565b60006020820190506114e060008301846111cb565b92915050565b60006020820190506114fb60008301846111da565b92915050565b6000602082019050818103600083015261151b8184611200565b905092915050565b6000602082019050818103600083015261153c816112a3565b9050919050565b6000602082019050818103600083015261155c816112c6565b9050919050565b6000602082019050818103600083015261157c816112e9565b9050919050565b6000602082019050818103600083015261159c8161130c565b9050919050565b600060208201905081810360008301526115bc8161132f565b9050919050565b600060208201905081810360008301526115dc81611352565b9050919050565b600060208201905081810360008301526115fc81611375565b9050919050565b6000602082019050818103600083015261161c81611398565b9050919050565b6000602082019050818103600083015261163c816113bb565b9050919050565b6000602082019050818103600083015261165c816113de565b9050919050565b60006020820190506116786000830184611401565b92915050565b60006080820190506116936000830187611401565b81810360208301526116a5818661126a565b905081810360408301526116b98185611200565b90506116c86060830184611401565b95945050505050565b60006116db6116ec565b90506116e782826118b1565b919050565b6000604051905090565b600067ffffffffffffffff8211156117115761171061191b565b5b61171a8261194a565b9050602081019050919050565b600067ffffffffffffffff8211156117425761174161191b565b5b61174b8261194a565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b60006117a682611865565b91506117b183611865565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156117e6576117e56118ec565b5b828201905092915050565b60006117fc82611845565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561189c578082015181840152602081019050611881565b838111156118ab576000848401525b50505050565b6118ba8261194a565b810181811067ffffffffffffffff821117156118d9576118d861191b565b5b80604052505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f54696d656c6f636b3a2044656c6179206d757374206e6f74206578636565642060008201527f6d6178696d756d2064656c61792e000000000000000000000000000000000000602082015250565b7f54696d656c6f636b3a2043616c6c206d75737420636f6d652066726f6d20546960008201527f6d656c6f636b2e00000000000000000000000000000000000000000000000000602082015250565b7f54696d656c6f636b3a20457374696d6174656420657865637574696f6e20626c60008201527f6f636b206d75737420736174697366792064656c61792e000000000000000000602082015250565b7f54696d656c6f636b3a205472616e73616374696f6e206861736e27742062656560008201527f6e207175657565642e0000000000000000000000000000000000000000000000602082015250565b7f54696d656c6f636b3a2043616c6c206d75737420636f6d652066726f6d20616460008201527f6d696e2e00000000000000000000000000000000000000000000000000000000602082015250565b7f54696d656c6f636b3a2043616c6c206d75737420636f6d652066726f6d20706560008201527f6e64696e6741646d696e2e000000000000000000000000000000000000000000602082015250565b7f54696d656c6f636b3a205472616e73616374696f6e20657865637574696f6e2060008201527f72657665727465642e0000000000000000000000000000000000000000000000602082015250565b7f54696d656c6f636b3a205472616e73616374696f6e206973207374616c652e00600082015250565b7f54696d656c6f636b3a205472616e73616374696f6e206861736e27742073757260008201527f7061737365642074696d65206c6f636b2e000000000000000000000000000000602082015250565b7f54696d656c6f636b3a2044656c6179206d75737420657863656564206d696e6960008201527f6d756d2064656c61792e00000000000000000000000000000000000000000000602082015250565b611c54816117f1565b8114611c5f57600080fd5b50565b611c6b8161180f565b8114611c7657600080fd5b50565b611c8281611865565b8114611c8d57600080fd5b5056fea264697066735822122045fe7a0a7cf4d3ba4af18b8204fe0e89df246ad52656a0dfcb1b374e07a6421364736f6c63430008040033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000a42f6fb68607048dde54fcd53d2195cc8ca5f48600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : admin_ (address): 0xa42f6FB68607048dDe54FCd53D2195cc8ca5F486
Arg [1] : delay_ (uint256): 0
Arg [2] : minDelay_ (uint256): 0
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000a42f6fb68607048dde54fcd53d2195cc8ca5f486
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000000
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 34 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
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.