Warning! Contract bytecode has been changed and doesn't match the verified one. Therefore, interaction with this smart contract may be risky.
This contract has been partially verified via Sourcify.
View contract in Sourcify repository
- Contract name:
- Nexus
- Optimization enabled
- true
- Compiler version
- v0.5.16+commit.9c3226ce
- Optimization runs
- 200
- EVM Version
- istanbul
- Verified at
- 2026-03-06T05:35:16.337989Z
Constructor Arguments
de4b3f61490b74c0ed6237523974fe299126bbbf8a8a7482fd220104c59b0c8400000000000000000000000019f12c947d25ff8a3b748829d8001ca09a28d46d
Arg [0] (address) : 0x3974fe299126bbbf8a8a7482fd220104c59b0c84
Nexus.sol
pragma solidity 0.5.16;
/**
* @title INexus
* @dev Basic interface for interacting with the Nexus i.e. SystemKernel
*/
interface INexus {
function governor() external view returns (address);
function getModule(bytes32 key) external view returns (address);
function proposeModule(bytes32 _key, address _addr) external;
function cancelProposedModule(bytes32 _key) external;
function acceptProposedModule(bytes32 _key) external;
function acceptProposedModules(bytes32[] calldata _keys) external;
function requestLockModule(bytes32 _key) external;
function cancelLockModule(bytes32 _key) external;
function lockModule(bytes32 _key) external;
}
/**
* @title Governable
* @author Stability Labs Pty. Ltd.
* @notice Simple contract implementing an Ownable pattern.
* @dev Derives from OpenZeppelin 2.3.0 Ownable.sol
* Modified to have custom name and features
*/
contract Governable {
event GovernorChanged(address indexed previousGovernor, address indexed newGovernor);
address private _governor;
/**
* @dev Initializes the contract setting the deployer as the initial Governor.
*/
constructor () internal {
_governor = msg.sender;
emit GovernorChanged(address(0), _governor);
}
/**
* @dev Returns the address of the current Governor.
*/
function governor() public view returns (address) {
return _governor;
}
/**
* @dev Throws if called by any account other than the Governor.
*/
modifier onlyGovernor() {
require(isGovernor(), "GOV: caller is not the Governor");
_;
}
/**
* @dev Returns true if the caller is the current Governor.
*/
function isGovernor() public view returns (bool) {
return msg.sender == _governor;
}
/**
* @dev Transfers Governance of the contract to a new account (`newGovernor`).
* Can only be called by the current Governor.
* @param _newGovernor Address of the new Governor
*/
function changeGovernor(address _newGovernor) external onlyGovernor {
_changeGovernor(_newGovernor);
}
/**
* @dev Change Governance of the contract to a new account (`newGovernor`).
* @param _newGovernor Address of the new Governor
*/
function _changeGovernor(address _newGovernor) internal {
require(_newGovernor != address(0), "GOV: new Governor is address(0)");
emit GovernorChanged(_governor, _newGovernor);
_governor = _newGovernor;
}
}
/**
* @title ClaimableGovernor
* @author Stability Labs Pty. Ltd.
* @notice 2 way handshake for Governance transfer
*/
contract ClaimableGovernor is Governable {
event GovernorChangeClaimed(address indexed proposedGovernor);
event GovernorChangeCancelled(address indexed governor, address indexed proposed);
event GovernorChangeRequested(address indexed governor, address indexed proposed);
address public proposedGovernor = address(0);
/**
* @dev Throws if called by any account other than the Proposed Governor.
*/
modifier onlyProposedGovernor() {
require(msg.sender == proposedGovernor, "Sender is not proposed governor");
_;
}
constructor(address _governorAddr) public {
_changeGovernor(_governorAddr);
}
//@override
function changeGovernor(address) external onlyGovernor {
revert("Direct change not allowed");
}
/**
* @dev Current Governor request to proposes a new Governor
* @param _proposedGovernor Address of the proposed Governor
*/
function requestGovernorChange(address _proposedGovernor) public onlyGovernor {
require(_proposedGovernor != address(0), "Proposed governor is address(0)");
require(proposedGovernor == address(0), "Proposed governor already set");
proposedGovernor = _proposedGovernor;
emit GovernorChangeRequested(governor(), _proposedGovernor);
}
/**
* @dev Current Governor cancel Governor change request
*/
function cancelGovernorChange() public onlyGovernor {
require(proposedGovernor != address(0), "Proposed Governor not set");
emit GovernorChangeCancelled(governor(), proposedGovernor);
proposedGovernor = address(0);
}
/**
* @dev Proposed Governor can claim governance ownership
*/
function claimGovernorChange() public onlyProposedGovernor {
_changeGovernor(proposedGovernor);
emit GovernorChangeClaimed(proposedGovernor);
proposedGovernor = address(0);
}
}
/**
* @dev Wrappers over Solidity's arithmetic operations with added overflow
* checks.
*/
library SafeMath {
/**
* @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) {
uint256 c = a + b;
require(c >= a, "SafeMath: addition overflow");
return c;
}
/**
* @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 sub(a, b, "SafeMath: subtraction overflow");
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting with custom message on
* overflow (when the result is negative).
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
* - Subtraction cannot overflow.
*
* _Available since v2.4.0._
*/
function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b <= a, errorMessage);
uint256 c = a - b;
return c;
}
/**
* @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) {
// 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 0;
}
uint256 c = a * b;
require(c / a == b, "SafeMath: multiplication overflow");
return c;
}
/**
* @dev Returns the integer division of two unsigned integers. Reverts 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) internal pure returns (uint256) {
return div(a, b, "SafeMath: division by zero");
}
/**
* @dev Returns the integer division of two unsigned integers. Reverts 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.
*
* _Available since v2.4.0._
*/
function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
// Solidity only automatically asserts when dividing by 0
require(b > 0, errorMessage);
uint256 c = a / b;
// assert(a == b * c + a % b); // There is no case in which this doesn't hold
return c;
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* Reverts 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 mod(a, b, "SafeMath: modulo by zero");
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* Reverts with custom message 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.
*
* _Available since v2.4.0._
*/
function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b != 0, errorMessage);
return a % b;
}
}
/**
* @title DelayedClaimableGovernor
* @author Stability Labs Pty. Ltd.
* @notice Current Governor can initiate governance change request.
* After a defined delay, proposed Governor can claim governance
* ownership.
*/
contract DelayedClaimableGovernor is ClaimableGovernor {
using SafeMath for uint256;
uint256 public delay = 0;
uint256 public requestTime = 0;
/**
* @dev Initializes the contract with given delay
* @param _governorAddr Initial governor
* @param _delay Delay in seconds for 2 way handshake
*/
constructor(address _governorAddr, uint256 _delay)
public
ClaimableGovernor(_governorAddr)
{
require(_delay > 0, "Delay must be greater than zero");
delay = _delay;
}
//@override
/**
* @dev Requests change of governor and logs request time
* @param _proposedGovernor Address of the new governor
*/
function requestGovernorChange(address _proposedGovernor) public onlyGovernor {
requestTime = now;
super.requestGovernorChange(_proposedGovernor);
}
//@override
/**
* @dev Cancels an outstanding governor change request by resetting request time
*/
function cancelGovernorChange() public onlyGovernor {
requestTime = 0;
super.cancelGovernorChange();
}
//@override
/**
* @dev Proposed governor claims new position, callable after time elapsed
*/
function claimGovernorChange() public onlyProposedGovernor {
require(now >= (requestTime.add(delay)), "Delay not over");
super.claimGovernorChange();
requestTime = 0;
}
}
/**
* @title Nexus
* @author Stability Labs Pty. Ltd.
* @notice This is the system address kernel, it also facilitates the changing of governor
* @dev The Nexus is mStable's Kernel, and allows the publishing and propagating
* of new system Modules. Other Modules will read from the Nexus
*/
contract Nexus is INexus, DelayedClaimableGovernor {
event ModuleProposed(bytes32 indexed key, address addr, uint256 timestamp);
event ModuleAdded(bytes32 indexed key, address addr, bool isLocked);
event ModuleCancelled(bytes32 indexed key);
event ModuleLockRequested(bytes32 indexed key, uint256 timestamp);
event ModuleLockEnabled(bytes32 indexed key);
event ModuleLockCancelled(bytes32 indexed key);
/** @dev Struct to store information about current modules */
struct Module {
address addr; // Module address
bool isLocked; // Module lock status
}
/** @dev Struct to store information about proposed modules */
struct Proposal {
address newAddress; // Proposed Module address
uint256 timestamp; // Timestamp when module upgrade was proposed
}
// 1 week delayed upgrade period
uint256 public constant UPGRADE_DELAY = 1 weeks;
// Module-key => Module
mapping(bytes32 => Module) public modules;
// Module-address => Module-key
mapping(address => bytes32) private addressToModule;
// Module-key => Proposal
mapping(bytes32 => Proposal) public proposedModules;
// Module-key => Timestamp when lock was proposed
mapping(bytes32 => uint256) public proposedLockModules;
// Init flag to allow add modules at the time of deplyment without delay
bool public initialized = false;
/**
* @dev Modifier allows functions calls only when contract is not initialized.
*/
modifier whenNotInitialized() {
require(!initialized, "Nexus is already initialized");
_;
}
/**
* @dev Initialises the Nexus and adds the core data to the Kernel (itself and governor)
* @param _governorAddr Governor address
*/
constructor(address _governorAddr)
public
DelayedClaimableGovernor(_governorAddr, UPGRADE_DELAY)
{}
/**
* @dev Adds multiple new modules to the system to initialize the
* Nexus contract with default modules. This should be called first
* after deploying Nexus contract.
* @param _keys Keys of the new modules in bytes32 form
* @param _addresses Contract addresses of the new modules
* @param _isLocked IsLocked flag for the new modules
* @param _governorAddr New Governor address
* @return bool Success of publishing new Modules
*/
function initialize(
bytes32[] calldata _keys,
address[] calldata _addresses,
bool[] calldata _isLocked,
address _governorAddr
)
external
onlyGovernor
whenNotInitialized
returns (bool)
{
uint256 len = _keys.length;
require(len > 0, "No keys provided");
require(len == _addresses.length, "Insufficient address data");
require(len == _isLocked.length, "Insufficient locked statuses");
for(uint256 i = 0 ; i < len; i++) {
_publishModule(_keys[i], _addresses[i], _isLocked[i]);
}
if(_governorAddr != governor()) _changeGovernor(_governorAddr);
initialized = true;
return true;
}
/***************************************
MODULE ADDING
****************************************/
/**
* @dev Propose a new or update existing module
* @param _key Key of the module
* @param _addr Address of the module
*/
function proposeModule(bytes32 _key, address _addr)
external
onlyGovernor
{
require(_key != bytes32(0x0), "Key must not be zero");
require(_addr != address(0), "Module address must not be 0");
require(!modules[_key].isLocked, "Module must be unlocked");
require(modules[_key].addr != _addr, "Module already has same address");
Proposal storage p = proposedModules[_key];
require(p.timestamp == 0, "Module already proposed");
p.newAddress = _addr;
p.timestamp = now;
emit ModuleProposed(_key, _addr, now);
}
/**
* @dev Cancel a proposed module request
* @param _key Key of the module
*/
function cancelProposedModule(bytes32 _key)
external
onlyGovernor
{
uint256 timestamp = proposedModules[_key].timestamp;
require(timestamp > 0, "Proposed module not found");
delete proposedModules[_key];
emit ModuleCancelled(_key);
}
/**
* @dev Accept and publish an already proposed module
* @param _key Key of the module
*/
function acceptProposedModule(bytes32 _key)
external
onlyGovernor
{
_acceptProposedModule(_key);
}
/**
* @dev Accept and publish already proposed modules
* @param _keys Keys array of the modules
*/
function acceptProposedModules(bytes32[] calldata _keys)
external
onlyGovernor
{
uint256 len = _keys.length;
require(len > 0, "Keys array empty");
for(uint256 i = 0 ; i < len; i++) {
_acceptProposedModule(_keys[i]);
}
}
/**
* @dev Accept a proposed module
* @param _key Key of the module
*/
function _acceptProposedModule(bytes32 _key) internal {
Proposal memory p = proposedModules[_key];
require(_isDelayOver(p.timestamp), "Module upgrade delay not over");
delete proposedModules[_key];
_publishModule(_key, p.newAddress, false);
}
/**
* @dev Internal func to publish a module to kernel
* @param _key Key of the new module in bytes32 form
* @param _addr Contract address of the new module
* @param _isLocked Flag to lock a module
*/
function _publishModule(bytes32 _key, address _addr, bool _isLocked) internal {
require(addressToModule[_addr] == bytes32(0x0), "Modules must have unique addr");
require(!modules[_key].isLocked, "Module must be unlocked");
// Old no longer points to a moduleAddress
address oldModuleAddr = modules[_key].addr;
if(oldModuleAddr != address(0x0)) {
addressToModule[oldModuleAddr] = bytes32(0x0);
}
modules[_key].addr = _addr;
modules[_key].isLocked = _isLocked;
addressToModule[_addr] = _key;
emit ModuleAdded(_key, _addr, _isLocked);
}
/***************************************
MODULE LOCKING
****************************************/
/**
* @dev Request to lock an existing module
* @param _key Key of the module
*/
function requestLockModule(bytes32 _key)
external
onlyGovernor
{
require(moduleExists(_key), "Module must exist");
require(!modules[_key].isLocked, "Module must be unlocked");
require(proposedLockModules[_key] == 0, "Lock already proposed");
proposedLockModules[_key] = now;
emit ModuleLockRequested(_key, now);
}
/**
* @dev Cancel a lock module request
* @param _key Key of the module
*/
function cancelLockModule(bytes32 _key)
external
onlyGovernor
{
require(proposedLockModules[_key] > 0, "Module lock request not found");
delete proposedLockModules[_key];
emit ModuleLockCancelled(_key);
}
/**
* @dev Permanently lock a module to its current settings
* @param _key Bytes32 key of the module
*/
function lockModule(bytes32 _key)
external
onlyGovernor
{
require(_isDelayOver(proposedLockModules[_key]), "Delay not over");
modules[_key].isLocked = true;
delete proposedLockModules[_key];
emit ModuleLockEnabled(_key);
}
/***************************************
HELPERS & GETTERS
****************************************/
/**
* @dev Checks if a module exists
* @param _key Key of the module
* @return Returns 'true' when a module exists, otherwise 'false'
*/
function moduleExists(bytes32 _key) public view returns (bool) {
if(_key != 0 && modules[_key].addr != address(0))
return true;
return false;
}
/**
* @dev Get the module address
* @param _key Key of the module
* @return Return the address of the module
*/
function getModule(bytes32 _key) external view returns (address addr) {
addr = modules[_key].addr;
}
/**
* @dev Checks if upgrade delay over
* @param _timestamp Timestamp to check
* @return Return 'true' when delay is over, otherwise 'false'
*/
function _isDelayOver(uint256 _timestamp) private view returns (bool) {
if(_timestamp > 0 && now >= _timestamp.add(UPGRADE_DELAY))
return true;
return false;
}
}
Compiler Settings
{"remappings":[],"optimizer":{"runs":200,"enabled":true},"libraries":{},"evmVersion":"istanbul","compilationTarget":{"Nexus.sol":"Nexus"}}
Contract ABI
[{"type":"constructor","stateMutability":"nonpayable","payable":false,"inputs":[{"type":"address","name":"_governorAddr","internalType":"address"}]},{"type":"event","name":"GovernorChangeCancelled","inputs":[{"type":"address","name":"governor","internalType":"address","indexed":true},{"type":"address","name":"proposed","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"GovernorChangeClaimed","inputs":[{"type":"address","name":"proposedGovernor","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"GovernorChangeRequested","inputs":[{"type":"address","name":"governor","internalType":"address","indexed":true},{"type":"address","name":"proposed","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"GovernorChanged","inputs":[{"type":"address","name":"previousGovernor","internalType":"address","indexed":true},{"type":"address","name":"newGovernor","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"ModuleAdded","inputs":[{"type":"bytes32","name":"key","internalType":"bytes32","indexed":true},{"type":"address","name":"addr","internalType":"address","indexed":false},{"type":"bool","name":"isLocked","internalType":"bool","indexed":false}],"anonymous":false},{"type":"event","name":"ModuleCancelled","inputs":[{"type":"bytes32","name":"key","internalType":"bytes32","indexed":true}],"anonymous":false},{"type":"event","name":"ModuleLockCancelled","inputs":[{"type":"bytes32","name":"key","internalType":"bytes32","indexed":true}],"anonymous":false},{"type":"event","name":"ModuleLockEnabled","inputs":[{"type":"bytes32","name":"key","internalType":"bytes32","indexed":true}],"anonymous":false},{"type":"event","name":"ModuleLockRequested","inputs":[{"type":"bytes32","name":"key","internalType":"bytes32","indexed":true},{"type":"uint256","name":"timestamp","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"ModuleProposed","inputs":[{"type":"bytes32","name":"key","internalType":"bytes32","indexed":true},{"type":"address","name":"addr","internalType":"address","indexed":false},{"type":"uint256","name":"timestamp","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"UPGRADE_DELAY","inputs":[],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"acceptProposedModule","inputs":[{"type":"bytes32","name":"_key","internalType":"bytes32"}],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"acceptProposedModules","inputs":[{"type":"bytes32[]","name":"_keys","internalType":"bytes32[]"}],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"cancelGovernorChange","inputs":[],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"cancelLockModule","inputs":[{"type":"bytes32","name":"_key","internalType":"bytes32"}],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"cancelProposedModule","inputs":[{"type":"bytes32","name":"_key","internalType":"bytes32"}],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"changeGovernor","inputs":[{"type":"address","name":"","internalType":"address"}],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"claimGovernorChange","inputs":[],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"delay","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"address","name":"addr","internalType":"address"}],"name":"getModule","inputs":[{"type":"bytes32","name":"_key","internalType":"bytes32"}],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"address","name":"","internalType":"address"}],"name":"governor","inputs":[],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"initialize","inputs":[{"type":"bytes32[]","name":"_keys","internalType":"bytes32[]"},{"type":"address[]","name":"_addresses","internalType":"address[]"},{"type":"bool[]","name":"_isLocked","internalType":"bool[]"},{"type":"address","name":"_governorAddr","internalType":"address"}],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"initialized","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"isGovernor","inputs":[],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"lockModule","inputs":[{"type":"bytes32","name":"_key","internalType":"bytes32"}],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"moduleExists","inputs":[{"type":"bytes32","name":"_key","internalType":"bytes32"}],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"address","name":"addr","internalType":"address"},{"type":"bool","name":"isLocked","internalType":"bool"}],"name":"modules","inputs":[{"type":"bytes32","name":"","internalType":"bytes32"}],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"proposeModule","inputs":[{"type":"bytes32","name":"_key","internalType":"bytes32"},{"type":"address","name":"_addr","internalType":"address"}],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"address","name":"","internalType":"address"}],"name":"proposedGovernor","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"proposedLockModules","inputs":[{"type":"bytes32","name":"","internalType":"bytes32"}],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"address","name":"newAddress","internalType":"address"},{"type":"uint256","name":"timestamp","internalType":"uint256"}],"name":"proposedModules","inputs":[{"type":"bytes32","name":"","internalType":"bytes32"}],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"requestGovernorChange","inputs":[{"type":"address","name":"_proposedGovernor","internalType":"address"}],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"requestLockModule","inputs":[{"type":"bytes32","name":"_key","internalType":"bytes32"}],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"requestTime","inputs":[],"constant":true}]
Contract Creation Code
0x6080604052600180546001600160a01b0319169055600060028190556003556008805460ff1916905534801561003457600080fd5b5060405162001ba238038062001ba28339818101604052602081101561005957600080fd5b5051600080546001600160a01b0319163317808255604051839262093a809284926001600160a01b0391909116919060008051602062001b82833981519152908290a36100ae816001600160e01b0361010f16565b5060008111610104576040805162461bcd60e51b815260206004820152601f60248201527f44656c6179206d7573742062652067726561746572207468616e207a65726f00604482015290519081900360640190fd5b600255506101b49050565b6001600160a01b03811661016a576040805162461bcd60e51b815260206004820152601f60248201527f474f563a206e657720476f7665726e6f72206973206164647265737328302900604482015290519081900360640190fd5b600080546040516001600160a01b038085169392169160008051602062001b8283398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6119be80620001c46000396000f3fe608060405234801561001057600080fd5b50600436106101585760003560e01c806385acd641116100c3578063b0b6cc1a1161007c578063b0b6cc1a1461049e578063c7af3352146104de578063d7e0842a146104e6578063d7fd0e7714610503578063e4c0aaf41461050b578063efa2f3a21461053157610158565b806385acd6411461042f5780638a11a3701461044c5780638c33c19c1461045457806394ccb1371461045c57806397f5fea614610479578063ad339d7a1461049657610158565b8063381042c811610115578063381042c81461023d57806347fe8b1d146103545780636921ea411461035c5780636a42b8f8146103ca5780636a89934b146103d25780636d4e19911461041257610158565b8063099c47bc1461015d57806309ea14aa146101855780630c340a24146101b1578063158ef93e146101d5578063165ed306146101f157806328066b8614610220575b600080fd5b6101836004803603602081101561017357600080fd5b50356001600160a01b031661054e565b005b6101836004803603604081101561019b57600080fd5b50803590602001356001600160a01b03166105a5565b6101b961082d565b604080516001600160a01b039092168252519081900360200190f35b6101dd61083c565b604080519115158252519081900360200190f35b61020e6004803603602081101561020757600080fd5b5035610845565b60408051918252519081900360200190f35b6101836004803603602081101561023657600080fd5b5035610857565b6101dd6004803603608081101561025357600080fd5b810190602081018135600160201b81111561026d57600080fd5b82018360208201111561027f57600080fd5b803590602001918460208302840111600160201b831117156102a057600080fd5b919390929091602081019035600160201b8111156102bd57600080fd5b8201836020820111156102cf57600080fd5b803590602001918460208302840111600160201b831117156102f057600080fd5b919390929091602081019035600160201b81111561030d57600080fd5b82018360208201111561031f57600080fd5b803590602001918460208302840111600160201b8311171561034057600080fd5b9193509150356001600160a01b03166108a7565b61020e610adc565b6101836004803603602081101561037257600080fd5b810190602081018135600160201b81111561038c57600080fd5b82018360208201111561039e57600080fd5b803590602001918460208302840111600160201b831117156103bf57600080fd5b509092509050610ae3565b61020e610ba4565b6103ef600480360360208110156103e857600080fd5b5035610baa565b604080516001600160a01b03909316835260208301919091528051918290030190f35b6101836004803603602081101561042857600080fd5b5035610bcf565b6101b96004803603602081101561044557600080fd5b5035610cc6565b6101b9610ce1565b610183610cf0565b6101dd6004803603602081101561047257600080fd5b5035610d46565b6101836004803603602081101561048f57600080fd5b5035610d83565b610183610f22565b6104bb600480360360208110156104b457600080fd5b5035610fea565b604080516001600160a01b03909316835290151560208301528051918290030190f35b6101dd611011565b610183600480360360208110156104fc57600080fd5b5035611022565b61020e61111a565b6101836004803603602081101561052157600080fd5b50356001600160a01b0316611120565b6101836004803603602081101561054757600080fd5b50356111b4565b610556611011565b610595576040805162461bcd60e51b815260206004820152601f602482015260008051602061196a833981519152604482015290519081900360640190fd5b426003556105a281611296565b50565b6105ad611011565b6105ec576040805162461bcd60e51b815260206004820152601f602482015260008051602061196a833981519152604482015290519081900360640190fd5b81610635576040805162461bcd60e51b81526020600482015260146024820152734b6579206d757374206e6f74206265207a65726f60601b604482015290519081900360640190fd5b6001600160a01b038116610690576040805162461bcd60e51b815260206004820152601c60248201527f4d6f64756c652061646472657373206d757374206e6f74206265203000000000604482015290519081900360640190fd5b600082815260046020526040902054600160a01b900460ff16156106f5576040805162461bcd60e51b8152602060048201526017602482015276135bd91d5b19481b5d5cdd081899481d5b9b1bd8dad959604a1b604482015290519081900360640190fd5b6000828152600460205260409020546001600160a01b0382811691161415610764576040805162461bcd60e51b815260206004820152601f60248201527f4d6f64756c6520616c7265616479206861732073616d65206164647265737300604482015290519081900360640190fd5b60008281526006602052604090206001810154156107c9576040805162461bcd60e51b815260206004820152601760248201527f4d6f64756c6520616c72656164792070726f706f736564000000000000000000604482015290519081900360640190fd5b80546001600160a01b0319166001600160a01b03831690811782554260018301819055604080519283526020830191909152805185927fa5917e6bf5563219e2772cffe6989d6f2ef8235ab280ab88f8c37479562e58a392908290030190a2505050565b6000546001600160a01b031690565b60085460ff1681565b60076020526000908152604090205481565b61085f611011565b61089e576040805162461bcd60e51b815260206004820152601f602482015260008051602061196a833981519152604482015290519081900360640190fd5b6105a2816113f4565b60006108b1611011565b6108f0576040805162461bcd60e51b815260206004820152601f602482015260008051602061196a833981519152604482015290519081900360640190fd5b60085460ff1615610948576040805162461bcd60e51b815260206004820152601c60248201527f4e6578757320697320616c726561647920696e697469616c697a656400000000604482015290519081900360640190fd5b868061098e576040805162461bcd60e51b815260206004820152601060248201526f139bc81ad95e5cc81c1c9bdd9a59195960821b604482015290519081900360640190fd5b8086146109e2576040805162461bcd60e51b815260206004820152601960248201527f496e73756666696369656e742061646472657373206461746100000000000000604482015290519081900360640190fd5b808414610a36576040805162461bcd60e51b815260206004820152601c60248201527f496e73756666696369656e74206c6f636b656420737461747573657300000000604482015290519081900360640190fd5b60005b81811015610a9557610a8d8a8a83818110610a5057fe5b90506020020135898984818110610a6357fe5b905060200201356001600160a01b0316888885818110610a7f57fe5b9050602002013515156114bc565b600101610a39565b50610a9e61082d565b6001600160a01b0316836001600160a01b031614610abf57610abf83611651565b50506008805460ff19166001908117909155979650505050505050565b62093a8081565b610aeb611011565b610b2a576040805162461bcd60e51b815260206004820152601f602482015260008051602061196a833981519152604482015290519081900360640190fd5b8080610b70576040805162461bcd60e51b815260206004820152601060248201526f4b65797320617272617920656d70747960801b604482015290519081900360640190fd5b60005b81811015610b9e57610b96848483818110610b8a57fe5b905060200201356113f4565b600101610b73565b50505050565b60025481565b600660205260009081526040902080546001909101546001600160a01b039091169082565b610bd7611011565b610c16576040805162461bcd60e51b815260206004820152601f602482015260008051602061196a833981519152604482015290519081900360640190fd5b600081815260076020526040902054610c2e90611707565b610c70576040805162461bcd60e51b815260206004820152600e60248201526d2232b630bc903737ba1037bb32b960911b604482015290519081900360640190fd5b6000818152600460209081526040808320805460ff60a01b1916600160a01b17905560079091528082208290555182917f097d0a4360ac95150faf267a7b4a999756a69238c2c7023cac729d81f0b733a391a250565b6000908152600460205260409020546001600160a01b031690565b6001546001600160a01b031681565b610cf8611011565b610d37576040805162461bcd60e51b815260206004820152601f602482015260008051602061196a833981519152604482015290519081900360640190fd5b6000600355610d44611734565b565b60008115801590610d6d57506000828152600460205260409020546001600160a01b031615155b15610d7a57506001610d7e565b5060005b919050565b610d8b611011565b610dca576040805162461bcd60e51b815260206004820152601f602482015260008051602061196a833981519152604482015290519081900360640190fd5b610dd381610d46565b610e18576040805162461bcd60e51b8152602060048201526011602482015270135bd91d5b19481b5d5cdd08195e1a5cdd607a1b604482015290519081900360640190fd5b600081815260046020526040902054600160a01b900460ff1615610e7d576040805162461bcd60e51b8152602060048201526017602482015276135bd91d5b19481b5d5cdd081899481d5b9b1bd8dad959604a1b604482015290519081900360640190fd5b60008181526007602052604090205415610ed6576040805162461bcd60e51b8152602060048201526015602482015274131bd8dac8185b1c9958591e481c1c9bdc1bdcd959605a1b604482015290519081900360640190fd5b60008181526007602090815260409182902042908190558251908152915183927f57456e8dc47899fbd8a75be3129514a3e4cca602e26b766d4bbb821975c4375892908290030190a250565b6001546001600160a01b03163314610f81576040805162461bcd60e51b815260206004820152601f60248201527f53656e646572206973206e6f742070726f706f73656420676f7665726e6f7200604482015290519081900360640190fd5b600254600354610f969163ffffffff61183316565b421015610fdb576040805162461bcd60e51b815260206004820152600e60248201526d2232b630bc903737ba1037bb32b960911b604482015290519081900360640190fd5b610fe3611894565b6000600355565b6004602052600090815260409020546001600160a01b03811690600160a01b900460ff1682565b6000546001600160a01b0316331490565b61102a611011565b611069576040805162461bcd60e51b815260206004820152601f602482015260008051602061196a833981519152604482015290519081900360640190fd5b600081815260066020526040902060010154806110cd576040805162461bcd60e51b815260206004820152601960248201527f50726f706f736564206d6f64756c65206e6f7420666f756e6400000000000000604482015290519081900360640190fd5b60008281526006602052604080822080546001600160a01b03191681556001018290555183917f4dd889c845f5a942b8304764283938168000b8f4903940690beb685ca2fc16cc91a25050565b60035481565b611128611011565b611167576040805162461bcd60e51b815260206004820152601f602482015260008051602061196a833981519152604482015290519081900360640190fd5b6040805162461bcd60e51b815260206004820152601960248201527f446972656374206368616e6765206e6f7420616c6c6f77656400000000000000604482015290519081900360640190fd5b6111bc611011565b6111fb576040805162461bcd60e51b815260206004820152601f602482015260008051602061196a833981519152604482015290519081900360640190fd5b60008181526007602052604090205461125b576040805162461bcd60e51b815260206004820152601d60248201527f4d6f64756c65206c6f636b2072657175657374206e6f7420666f756e64000000604482015290519081900360640190fd5b6000818152600760205260408082208290555182917f3d670309414f84151711e0ac2795a2b1686580ad9faca995492166a486255db391a250565b61129e611011565b6112dd576040805162461bcd60e51b815260206004820152601f602482015260008051602061196a833981519152604482015290519081900360640190fd5b6001600160a01b038116611338576040805162461bcd60e51b815260206004820152601f60248201527f50726f706f73656420676f7665726e6f72206973206164647265737328302900604482015290519081900360640190fd5b6001546001600160a01b031615611396576040805162461bcd60e51b815260206004820152601d60248201527f50726f706f73656420676f7665726e6f7220616c726561647920736574000000604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0383169081179091556113bc61082d565b6001600160a01b03167fa48c163cc46eb28aba8bdb525da18f15a83020cc18f439c933d79ea3ad9b50bb60405160405180910390a350565b6113fc611952565b50600081815260066020908152604091829020825180840190935280546001600160a01b031683526001015490820181905261143790611707565b611488576040805162461bcd60e51b815260206004820152601d60248201527f4d6f64756c6520757067726164652064656c6179206e6f74206f766572000000604482015290519081900360640190fd5b600082815260066020526040812080546001600160a01b031916815560010181905581516114b8918491906114bc565b5050565b6001600160a01b03821660009081526005602052604090205415611527576040805162461bcd60e51b815260206004820152601d60248201527f4d6f64756c6573206d757374206861766520756e697175652061646472000000604482015290519081900360640190fd5b600083815260046020526040902054600160a01b900460ff161561158c576040805162461bcd60e51b8152602060048201526017602482015276135bd91d5b19481b5d5cdd081899481d5b9b1bd8dad959604a1b604482015290519081900360640190fd5b6000838152600460205260409020546001600160a01b031680156115c4576001600160a01b0381166000908152600560205260408120555b60008481526004602090815260408083208054861515600160a01b810260ff60a01b196001600160a01b038b166001600160a01b0319909416841716179092558085526005845293829020889055815193845291830191909152805186927f7bf901a62d0edd068a4e74518eb8241133713d384171c7d0a3b7f6eb5c04095d92908290030190a250505050565b6001600160a01b0381166116ac576040805162461bcd60e51b815260206004820152601f60248201527f474f563a206e657720476f7665726e6f72206973206164647265737328302900604482015290519081900360640190fd5b600080546040516001600160a01b03808516939216917fde4b3f61490b74c0ed6237523974fe299126bbbf8a8a7482fd220104c59b0c8491a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60008082118015610d6d57506117268262093a8063ffffffff61183316565b4210610d7a57506001610d7e565b61173c611011565b61177b576040805162461bcd60e51b815260206004820152601f602482015260008051602061196a833981519152604482015290519081900360640190fd5b6001546001600160a01b03166117d8576040805162461bcd60e51b815260206004820152601960248201527f50726f706f73656420476f7665726e6f72206e6f742073657400000000000000604482015290519081900360640190fd5b6001546001600160a01b03166117ec61082d565b6001600160a01b03167f2f7bb10f75b8694ea78291d7ca4c9f2a75bc45f0f97046164ad3ee984bdf4bba60405160405180910390a3600180546001600160a01b0319169055565b60008282018381101561188d576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6001546001600160a01b031633146118f3576040805162461bcd60e51b815260206004820152601f60248201527f53656e646572206973206e6f742070726f706f73656420676f7665726e6f7200604482015290519081900360640190fd5b600154611908906001600160a01b0316611651565b6001546040516001600160a01b03909116907f0ad714cb5607f3b529b5d3292190925ae992a77b291e39ec09c390d4787896ba90600090a2600180546001600160a01b0319169055565b60408051808201909152600080825260208201529056fe474f563a2063616c6c6572206973206e6f742074686520476f7665726e6f7200a265627a7a723158207086f7e9d76bb328fe79dc25bc590a966d779a27870e3eec7f942a4930b7f35864736f6c63430005100032de4b3f61490b74c0ed6237523974fe299126bbbf8a8a7482fd220104c59b0c8400000000000000000000000019f12c947d25ff8a3b748829d8001ca09a28d46d
Deployed ByteCode
0x608060405234801561001057600080fd5b50600436106101585760003560e01c806385acd641116100c3578063b0b6cc1a1161007c578063b0b6cc1a1461049e578063c7af3352146104de578063d7e0842a146104e6578063d7fd0e7714610503578063e4c0aaf41461050b578063efa2f3a21461053157610158565b806385acd6411461042f5780638a11a3701461044c5780638c33c19c1461045457806394ccb1371461045c57806397f5fea614610479578063ad339d7a1461049657610158565b8063381042c811610115578063381042c81461023d57806347fe8b1d146103545780636921ea411461035c5780636a42b8f8146103ca5780636a89934b146103d25780636d4e19911461041257610158565b8063099c47bc1461015d57806309ea14aa146101855780630c340a24146101b1578063158ef93e146101d5578063165ed306146101f157806328066b8614610220575b600080fd5b6101836004803603602081101561017357600080fd5b50356001600160a01b031661054e565b005b6101836004803603604081101561019b57600080fd5b50803590602001356001600160a01b03166105a5565b6101b961082d565b604080516001600160a01b039092168252519081900360200190f35b6101dd61083c565b604080519115158252519081900360200190f35b61020e6004803603602081101561020757600080fd5b5035610845565b60408051918252519081900360200190f35b6101836004803603602081101561023657600080fd5b5035610857565b6101dd6004803603608081101561025357600080fd5b810190602081018135600160201b81111561026d57600080fd5b82018360208201111561027f57600080fd5b803590602001918460208302840111600160201b831117156102a057600080fd5b919390929091602081019035600160201b8111156102bd57600080fd5b8201836020820111156102cf57600080fd5b803590602001918460208302840111600160201b831117156102f057600080fd5b919390929091602081019035600160201b81111561030d57600080fd5b82018360208201111561031f57600080fd5b803590602001918460208302840111600160201b8311171561034057600080fd5b9193509150356001600160a01b03166108a7565b61020e610adc565b6101836004803603602081101561037257600080fd5b810190602081018135600160201b81111561038c57600080fd5b82018360208201111561039e57600080fd5b803590602001918460208302840111600160201b831117156103bf57600080fd5b509092509050610ae3565b61020e610ba4565b6103ef600480360360208110156103e857600080fd5b5035610baa565b604080516001600160a01b03909316835260208301919091528051918290030190f35b6101836004803603602081101561042857600080fd5b5035610bcf565b6101b96004803603602081101561044557600080fd5b5035610cc6565b6101b9610ce1565b610183610cf0565b6101dd6004803603602081101561047257600080fd5b5035610d46565b6101836004803603602081101561048f57600080fd5b5035610d83565b610183610f22565b6104bb600480360360208110156104b457600080fd5b5035610fea565b604080516001600160a01b03909316835290151560208301528051918290030190f35b6101dd611011565b610183600480360360208110156104fc57600080fd5b5035611022565b61020e61111a565b6101836004803603602081101561052157600080fd5b50356001600160a01b0316611120565b6101836004803603602081101561054757600080fd5b50356111b4565b610556611011565b610595576040805162461bcd60e51b815260206004820152601f602482015260008051602061196a833981519152604482015290519081900360640190fd5b426003556105a281611296565b50565b6105ad611011565b6105ec576040805162461bcd60e51b815260206004820152601f602482015260008051602061196a833981519152604482015290519081900360640190fd5b81610635576040805162461bcd60e51b81526020600482015260146024820152734b6579206d757374206e6f74206265207a65726f60601b604482015290519081900360640190fd5b6001600160a01b038116610690576040805162461bcd60e51b815260206004820152601c60248201527f4d6f64756c652061646472657373206d757374206e6f74206265203000000000604482015290519081900360640190fd5b600082815260046020526040902054600160a01b900460ff16156106f5576040805162461bcd60e51b8152602060048201526017602482015276135bd91d5b19481b5d5cdd081899481d5b9b1bd8dad959604a1b604482015290519081900360640190fd5b6000828152600460205260409020546001600160a01b0382811691161415610764576040805162461bcd60e51b815260206004820152601f60248201527f4d6f64756c6520616c7265616479206861732073616d65206164647265737300604482015290519081900360640190fd5b60008281526006602052604090206001810154156107c9576040805162461bcd60e51b815260206004820152601760248201527f4d6f64756c6520616c72656164792070726f706f736564000000000000000000604482015290519081900360640190fd5b80546001600160a01b0319166001600160a01b03831690811782554260018301819055604080519283526020830191909152805185927fa5917e6bf5563219e2772cffe6989d6f2ef8235ab280ab88f8c37479562e58a392908290030190a2505050565b6000546001600160a01b031690565b60085460ff1681565b60076020526000908152604090205481565b61085f611011565b61089e576040805162461bcd60e51b815260206004820152601f602482015260008051602061196a833981519152604482015290519081900360640190fd5b6105a2816113f4565b60006108b1611011565b6108f0576040805162461bcd60e51b815260206004820152601f602482015260008051602061196a833981519152604482015290519081900360640190fd5b60085460ff1615610948576040805162461bcd60e51b815260206004820152601c60248201527f4e6578757320697320616c726561647920696e697469616c697a656400000000604482015290519081900360640190fd5b868061098e576040805162461bcd60e51b815260206004820152601060248201526f139bc81ad95e5cc81c1c9bdd9a59195960821b604482015290519081900360640190fd5b8086146109e2576040805162461bcd60e51b815260206004820152601960248201527f496e73756666696369656e742061646472657373206461746100000000000000604482015290519081900360640190fd5b808414610a36576040805162461bcd60e51b815260206004820152601c60248201527f496e73756666696369656e74206c6f636b656420737461747573657300000000604482015290519081900360640190fd5b60005b81811015610a9557610a8d8a8a83818110610a5057fe5b90506020020135898984818110610a6357fe5b905060200201356001600160a01b0316888885818110610a7f57fe5b9050602002013515156114bc565b600101610a39565b50610a9e61082d565b6001600160a01b0316836001600160a01b031614610abf57610abf83611651565b50506008805460ff19166001908117909155979650505050505050565b62093a8081565b610aeb611011565b610b2a576040805162461bcd60e51b815260206004820152601f602482015260008051602061196a833981519152604482015290519081900360640190fd5b8080610b70576040805162461bcd60e51b815260206004820152601060248201526f4b65797320617272617920656d70747960801b604482015290519081900360640190fd5b60005b81811015610b9e57610b96848483818110610b8a57fe5b905060200201356113f4565b600101610b73565b50505050565b60025481565b600660205260009081526040902080546001909101546001600160a01b039091169082565b610bd7611011565b610c16576040805162461bcd60e51b815260206004820152601f602482015260008051602061196a833981519152604482015290519081900360640190fd5b600081815260076020526040902054610c2e90611707565b610c70576040805162461bcd60e51b815260206004820152600e60248201526d2232b630bc903737ba1037bb32b960911b604482015290519081900360640190fd5b6000818152600460209081526040808320805460ff60a01b1916600160a01b17905560079091528082208290555182917f097d0a4360ac95150faf267a7b4a999756a69238c2c7023cac729d81f0b733a391a250565b6000908152600460205260409020546001600160a01b031690565b6001546001600160a01b031681565b610cf8611011565b610d37576040805162461bcd60e51b815260206004820152601f602482015260008051602061196a833981519152604482015290519081900360640190fd5b6000600355610d44611734565b565b60008115801590610d6d57506000828152600460205260409020546001600160a01b031615155b15610d7a57506001610d7e565b5060005b919050565b610d8b611011565b610dca576040805162461bcd60e51b815260206004820152601f602482015260008051602061196a833981519152604482015290519081900360640190fd5b610dd381610d46565b610e18576040805162461bcd60e51b8152602060048201526011602482015270135bd91d5b19481b5d5cdd08195e1a5cdd607a1b604482015290519081900360640190fd5b600081815260046020526040902054600160a01b900460ff1615610e7d576040805162461bcd60e51b8152602060048201526017602482015276135bd91d5b19481b5d5cdd081899481d5b9b1bd8dad959604a1b604482015290519081900360640190fd5b60008181526007602052604090205415610ed6576040805162461bcd60e51b8152602060048201526015602482015274131bd8dac8185b1c9958591e481c1c9bdc1bdcd959605a1b604482015290519081900360640190fd5b60008181526007602090815260409182902042908190558251908152915183927f57456e8dc47899fbd8a75be3129514a3e4cca602e26b766d4bbb821975c4375892908290030190a250565b6001546001600160a01b03163314610f81576040805162461bcd60e51b815260206004820152601f60248201527f53656e646572206973206e6f742070726f706f73656420676f7665726e6f7200604482015290519081900360640190fd5b600254600354610f969163ffffffff61183316565b421015610fdb576040805162461bcd60e51b815260206004820152600e60248201526d2232b630bc903737ba1037bb32b960911b604482015290519081900360640190fd5b610fe3611894565b6000600355565b6004602052600090815260409020546001600160a01b03811690600160a01b900460ff1682565b6000546001600160a01b0316331490565b61102a611011565b611069576040805162461bcd60e51b815260206004820152601f602482015260008051602061196a833981519152604482015290519081900360640190fd5b600081815260066020526040902060010154806110cd576040805162461bcd60e51b815260206004820152601960248201527f50726f706f736564206d6f64756c65206e6f7420666f756e6400000000000000604482015290519081900360640190fd5b60008281526006602052604080822080546001600160a01b03191681556001018290555183917f4dd889c845f5a942b8304764283938168000b8f4903940690beb685ca2fc16cc91a25050565b60035481565b611128611011565b611167576040805162461bcd60e51b815260206004820152601f602482015260008051602061196a833981519152604482015290519081900360640190fd5b6040805162461bcd60e51b815260206004820152601960248201527f446972656374206368616e6765206e6f7420616c6c6f77656400000000000000604482015290519081900360640190fd5b6111bc611011565b6111fb576040805162461bcd60e51b815260206004820152601f602482015260008051602061196a833981519152604482015290519081900360640190fd5b60008181526007602052604090205461125b576040805162461bcd60e51b815260206004820152601d60248201527f4d6f64756c65206c6f636b2072657175657374206e6f7420666f756e64000000604482015290519081900360640190fd5b6000818152600760205260408082208290555182917f3d670309414f84151711e0ac2795a2b1686580ad9faca995492166a486255db391a250565b61129e611011565b6112dd576040805162461bcd60e51b815260206004820152601f602482015260008051602061196a833981519152604482015290519081900360640190fd5b6001600160a01b038116611338576040805162461bcd60e51b815260206004820152601f60248201527f50726f706f73656420676f7665726e6f72206973206164647265737328302900604482015290519081900360640190fd5b6001546001600160a01b031615611396576040805162461bcd60e51b815260206004820152601d60248201527f50726f706f73656420676f7665726e6f7220616c726561647920736574000000604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0383169081179091556113bc61082d565b6001600160a01b03167fa48c163cc46eb28aba8bdb525da18f15a83020cc18f439c933d79ea3ad9b50bb60405160405180910390a350565b6113fc611952565b50600081815260066020908152604091829020825180840190935280546001600160a01b031683526001015490820181905261143790611707565b611488576040805162461bcd60e51b815260206004820152601d60248201527f4d6f64756c6520757067726164652064656c6179206e6f74206f766572000000604482015290519081900360640190fd5b600082815260066020526040812080546001600160a01b031916815560010181905581516114b8918491906114bc565b5050565b6001600160a01b03821660009081526005602052604090205415611527576040805162461bcd60e51b815260206004820152601d60248201527f4d6f64756c6573206d757374206861766520756e697175652061646472000000604482015290519081900360640190fd5b600083815260046020526040902054600160a01b900460ff161561158c576040805162461bcd60e51b8152602060048201526017602482015276135bd91d5b19481b5d5cdd081899481d5b9b1bd8dad959604a1b604482015290519081900360640190fd5b6000838152600460205260409020546001600160a01b031680156115c4576001600160a01b0381166000908152600560205260408120555b60008481526004602090815260408083208054861515600160a01b810260ff60a01b196001600160a01b038b166001600160a01b0319909416841716179092558085526005845293829020889055815193845291830191909152805186927f7bf901a62d0edd068a4e74518eb8241133713d384171c7d0a3b7f6eb5c04095d92908290030190a250505050565b6001600160a01b0381166116ac576040805162461bcd60e51b815260206004820152601f60248201527f474f563a206e657720476f7665726e6f72206973206164647265737328302900604482015290519081900360640190fd5b600080546040516001600160a01b03808516939216917fde4b3f61490b74c0ed6237523974fe299126bbbf8a8a7482fd220104c59b0c8491a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60008082118015610d6d57506117268262093a8063ffffffff61183316565b4210610d7a57506001610d7e565b61173c611011565b61177b576040805162461bcd60e51b815260206004820152601f602482015260008051602061196a833981519152604482015290519081900360640190fd5b6001546001600160a01b03166117d8576040805162461bcd60e51b815260206004820152601960248201527f50726f706f73656420476f7665726e6f72206e6f742073657400000000000000604482015290519081900360640190fd5b6001546001600160a01b03166117ec61082d565b6001600160a01b03167f2f7bb10f75b8694ea78291d7ca4c9f2a75bc45f0f97046164ad3ee984bdf4bba60405160405180910390a3600180546001600160a01b0319169055565b60008282018381101561188d576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6001546001600160a01b031633146118f3576040805162461bcd60e51b815260206004820152601f60248201527f53656e646572206973206e6f742070726f706f73656420676f7665726e6f7200604482015290519081900360640190fd5b600154611908906001600160a01b0316611651565b6001546040516001600160a01b03909116907f0ad714cb5607f3b529b5d3292190925ae992a77b291e39ec09c390d4787896ba90600090a2600180546001600160a01b0319169055565b60408051808201909152600080825260208201529056fe474f563a2063616c6c6572206973206e6f742074686520476f7665726e6f7200a265627a7a723158207086f7e9d76bb328fe79dc25bc590a966d779a27870e3eec7f942a4930b7f35864736f6c63430005100032