ETH Price: $2,879.65 (-3.76%)
Gas: 8 Gwei

Contract

0xe2d6cCAC3EE3A21AbF7BeDBE2E107FfC0C037e80
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Value
Approve159487812022-11-11 19:12:11536 days ago1668193931IN
0xe2d6cCAC...C0C037e80
0 ETH0.0012394926.72131698
Approve141344812022-02-03 17:54:16817 days ago1643910856IN
0xe2d6cCAC...C0C037e80
0 ETH0.002627100
Approve141335972022-02-03 14:39:08818 days ago1643899148IN
0xe2d6cCAC...C0C037e80
0 ETH0.001838970
Approve141144192022-01-31 15:27:53821 days ago1643642873IN
0xe2d6cCAC...C0C037e80
0 ETH0.00677785146.80205531
Claim Ownership101467442020-05-27 8:34:361435 days ago1590568476IN
0xe2d6cCAC...C0C037e80
0 ETH0.0008619839.05000123
Transfer Ownersh...101467252020-05-27 8:30:111435 days ago1590568211IN
0xe2d6cCAC...C0C037e80
0 ETH0.0018122440
Initialize97382692020-03-25 4:08:371498 days ago1585109317IN
0xe2d6cCAC...C0C037e80
0 ETH0.000515553
0x6080604097381612020-03-25 3:45:591498 days ago1585107959IN
 Create: RenERC20LogicV1
0 ETH0.007506363

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
RenERC20LogicV1

Compiler Version
v0.5.16+commit.9c3226ce

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2020-03-25
*/

/**

Deployed by Ren Project, https://renproject.io

Commit hash: 9068f80
Repository: https://github.com/renproject/darknode-sol
Issues: https://github.com/renproject/darknode-sol/issues

Licenses
@openzeppelin/contracts: (MIT) https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/LICENSE
darknode-sol: (GNU GPL V3) https://github.com/renproject/darknode-sol/blob/master/LICENSE

*/

pragma solidity 0.5.16;


contract Initializable {

  
  bool private initialized;

  
  bool private initializing;

  
  modifier initializer() {
    require(initializing || isConstructor() || !initialized, "Contract instance has already been initialized");

    bool isTopLevelCall = !initializing;
    if (isTopLevelCall) {
      initializing = true;
      initialized = true;
    }

    _;

    if (isTopLevelCall) {
      initializing = false;
    }
  }

  
  function isConstructor() private view returns (bool) {
    
    
    
    
    
    address self = address(this);
    uint256 cs;
    assembly { cs := extcodesize(self) }
    return cs == 0;
  }

  
  uint256[50] private ______gap;
}

contract Context is Initializable {
    
    
    constructor () internal { }
    

    function _msgSender() internal view returns (address payable) {
        return msg.sender;
    }

    function _msgData() internal view returns (bytes memory) {
        this; 
        return msg.data;
    }
}

contract Ownable is Initializable, Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    
    function initialize(address sender) public initializer {
        _owner = sender;
        emit OwnershipTransferred(address(0), _owner);
    }

    
    function owner() public view returns (address) {
        return _owner;
    }

    
    modifier onlyOwner() {
        require(isOwner(), "Ownable: caller is not the owner");
        _;
    }

    
    function isOwner() public view returns (bool) {
        return _msgSender() == _owner;
    }

    
    function renounceOwnership() public onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    
    function transferOwnership(address newOwner) public onlyOwner {
        _transferOwnership(newOwner);
    }

    
    function _transferOwnership(address newOwner) internal {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }

    uint256[50] private ______gap;
}

contract Proxy {
  
  function () payable external {
    _fallback();
  }

  
  function _implementation() internal view returns (address);

  
  function _delegate(address implementation) internal {
    assembly {
      
      
      
      calldatacopy(0, 0, calldatasize)

      
      
      let result := delegatecall(gas, implementation, 0, calldatasize, 0, 0)

      
      returndatacopy(0, 0, returndatasize)

      switch result
      
      case 0 { revert(0, returndatasize) }
      default { return(0, returndatasize) }
    }
  }

  
  function _willFallback() internal {
  }

  
  function _fallback() internal {
    _willFallback();
    _delegate(_implementation());
  }
}

library OpenZeppelinUpgradesAddress {
    
    function isContract(address account) internal view returns (bool) {
        uint256 size;
        
        
        
        
        
        
        
        assembly { size := extcodesize(account) }
        return size > 0;
    }
}

contract BaseUpgradeabilityProxy is Proxy {
  
  event Upgraded(address indexed implementation);

  
  bytes32 internal constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;

  
  function _implementation() internal view returns (address impl) {
    bytes32 slot = IMPLEMENTATION_SLOT;
    assembly {
      impl := sload(slot)
    }
  }

  
  function _upgradeTo(address newImplementation) internal {
    _setImplementation(newImplementation);
    emit Upgraded(newImplementation);
  }

  
  function _setImplementation(address newImplementation) internal {
    require(OpenZeppelinUpgradesAddress.isContract(newImplementation), "Cannot set a proxy implementation to a non-contract address");

    bytes32 slot = IMPLEMENTATION_SLOT;

    assembly {
      sstore(slot, newImplementation)
    }
  }
}

contract UpgradeabilityProxy is BaseUpgradeabilityProxy {
  
  constructor(address _logic, bytes memory _data) public payable {
    assert(IMPLEMENTATION_SLOT == bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1));
    _setImplementation(_logic);
    if(_data.length > 0) {
      (bool success,) = _logic.delegatecall(_data);
      require(success);
    }
  }  
}

contract BaseAdminUpgradeabilityProxy is BaseUpgradeabilityProxy {
  
  event AdminChanged(address previousAdmin, address newAdmin);

  

  bytes32 internal constant ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;

  
  modifier ifAdmin() {
    if (msg.sender == _admin()) {
      _;
    } else {
      _fallback();
    }
  }

  
  function admin() external ifAdmin returns (address) {
    return _admin();
  }

  
  function implementation() external ifAdmin returns (address) {
    return _implementation();
  }

  
  function changeAdmin(address newAdmin) external ifAdmin {
    require(newAdmin != address(0), "Cannot change the admin of a proxy to the zero address");
    emit AdminChanged(_admin(), newAdmin);
    _setAdmin(newAdmin);
  }

  
  function upgradeTo(address newImplementation) external ifAdmin {
    _upgradeTo(newImplementation);
  }

  
  function upgradeToAndCall(address newImplementation, bytes calldata data) payable external ifAdmin {
    _upgradeTo(newImplementation);
    (bool success,) = newImplementation.delegatecall(data);
    require(success);
  }

  
  function _admin() internal view returns (address adm) {
    bytes32 slot = ADMIN_SLOT;
    assembly {
      adm := sload(slot)
    }
  }

  
  function _setAdmin(address newAdmin) internal {
    bytes32 slot = ADMIN_SLOT;

    assembly {
      sstore(slot, newAdmin)
    }
  }

  
  function _willFallback() internal {
    require(msg.sender != _admin(), "Cannot call fallback function from the proxy admin");
    super._willFallback();
  }
}

contract InitializableUpgradeabilityProxy is BaseUpgradeabilityProxy {
  
  function initialize(address _logic, bytes memory _data) public payable {
    require(_implementation() == address(0));
    assert(IMPLEMENTATION_SLOT == bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1));
    _setImplementation(_logic);
    if(_data.length > 0) {
      (bool success,) = _logic.delegatecall(_data);
      require(success);
    }
  }  
}

contract InitializableAdminUpgradeabilityProxy is BaseAdminUpgradeabilityProxy, InitializableUpgradeabilityProxy {
  
  function initialize(address _logic, address _admin, bytes memory _data) public payable {
    require(_implementation() == address(0));
    InitializableUpgradeabilityProxy.initialize(_logic, _data);
    assert(ADMIN_SLOT == bytes32(uint256(keccak256('eip1967.proxy.admin')) - 1));
    _setAdmin(_admin);
  }
}

interface IERC20 {
    
    function totalSupply() external view returns (uint256);

    
    function balanceOf(address account) external view returns (uint256);

    
    function transfer(address recipient, uint256 amount) external returns (bool);

    
    function allowance(address owner, address spender) external view returns (uint256);

    
    function approve(address spender, uint256 amount) external returns (bool);

    
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

    
    event Transfer(address indexed from, address indexed to, uint256 value);

    
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

library SafeMath {
    
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        
        
        
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        
        require(b > 0, errorMessage);
        uint256 c = a / b;
        

        return c;
    }

    
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

contract ERC20 is Initializable, Context, IERC20 {
    using SafeMath for uint256;

    mapping (address => uint256) private _balances;

    mapping (address => mapping (address => uint256)) private _allowances;

    uint256 private _totalSupply;

    
    function totalSupply() public view returns (uint256) {
        return _totalSupply;
    }

    
    function balanceOf(address account) public view returns (uint256) {
        return _balances[account];
    }

    
    function transfer(address recipient, uint256 amount) public returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    
    function allowance(address owner, address spender) public view returns (uint256) {
        return _allowances[owner][spender];
    }

    
    function approve(address spender, uint256 amount) public returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    
    function transferFrom(address sender, address recipient, uint256 amount) public returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

    
    function increaseAllowance(address spender, uint256 addedValue) public returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }

    
    function decreaseAllowance(address spender, uint256 subtractedValue) public returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }

    
    function _transfer(address sender, address recipient, uint256 amount) internal {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }

    
    function _mint(address account, uint256 amount) internal {
        require(account != address(0), "ERC20: mint to the zero address");

        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, amount);
    }

     
    function _burn(address account, uint256 amount) internal {
        require(account != address(0), "ERC20: burn from the zero address");

        _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(account, address(0), amount);
    }

    
    function _approve(address owner, address spender, uint256 amount) internal {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    
    function _burnFrom(address account, uint256 amount) internal {
        _burn(account, amount);
        _approve(account, _msgSender(), _allowances[account][_msgSender()].sub(amount, "ERC20: burn amount exceeds allowance"));
    }

    uint256[50] private ______gap;
}

contract ERC20Detailed is Initializable, IERC20 {
    string private _name;
    string private _symbol;
    uint8 private _decimals;

    
    function initialize(string memory name, string memory symbol, uint8 decimals) public initializer {
        _name = name;
        _symbol = symbol;
        _decimals = decimals;
    }

    
    function name() public view returns (string memory) {
        return _name;
    }

    
    function symbol() public view returns (string memory) {
        return _symbol;
    }

    
    function decimals() public view returns (uint8) {
        return _decimals;
    }

    uint256[50] private ______gap;
}

contract Claimable is Initializable, Ownable {
    address public pendingOwner;

    function initialize(address _nextOwner) public initializer {
        Ownable.initialize(_nextOwner);
    }

    modifier onlyPendingOwner() {
        require(
            _msgSender() == pendingOwner,
            "Claimable: caller is not the pending owner"
        );
        _;
    }

    function transferOwnership(address newOwner) public onlyOwner {
        require(
            newOwner != owner() && newOwner != pendingOwner,
            "Claimable: invalid new owner"
        );
        pendingOwner = newOwner;
    }

    function claimOwnership() public onlyPendingOwner {
        _transferOwnership(pendingOwner);
        delete pendingOwner;
    }
}

library Address {
    
    function isContract(address account) internal view returns (bool) {
        
        
        

        
        
        
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        
        assembly { codehash := extcodehash(account) }
        return (codehash != 0x0 && codehash != accountHash);
    }

    
    function toPayable(address account) internal pure returns (address payable) {
        return address(uint160(account));
    }

    
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        
        (bool success, ) = recipient.call.value(amount)("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }
}

library SafeERC20 {
    using SafeMath for uint256;
    using Address for address;

    function safeTransfer(IERC20 token, address to, uint256 value) internal {
        callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
    }

    function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {
        callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
    }

    function safeApprove(IERC20 token, address spender, uint256 value) internal {
        
        
        
        
        require((value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
    }

    function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {
        uint256 newAllowance = token.allowance(address(this), spender).add(value);
        callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal {
        uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero");
        callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    
    function callOptionalReturn(IERC20 token, bytes memory data) private {
        
        

        
        
        
        
        
        require(address(token).isContract(), "SafeERC20: call to non-contract");

        
        (bool success, bytes memory returndata) = address(token).call(data);
        require(success, "SafeERC20: low-level call failed");

        if (returndata.length > 0) { 
            
            require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
        }
    }
}

contract CanReclaimTokens is Claimable {
    using SafeERC20 for ERC20;

    mapping(address => bool) private recoverableTokensBlacklist;

    function initialize(address _nextOwner) public initializer {
        Claimable.initialize(_nextOwner);
    }

    function blacklistRecoverableToken(address _token) public onlyOwner {
        recoverableTokensBlacklist[_token] = true;
    }

    
    
    function recoverTokens(address _token) external onlyOwner {
        require(
            !recoverableTokensBlacklist[_token],
            "CanReclaimTokens: token is not recoverable"
        );

        if (_token == address(0x0)) {
            msg.sender.transfer(address(this).balance);
        } else {
            ERC20(_token).safeTransfer(
                msg.sender,
                ERC20(_token).balanceOf(address(this))
            );
        }
    }
}

contract ERC20WithRate is Initializable, Ownable, ERC20 {
    using SafeMath for uint256;

    uint256 public constant _rateScale = 1e18;
    uint256 internal _rate;

    event LogRateChanged(uint256 indexed _rate);

    
    function initialize(address _nextOwner, uint256 _initialRate)
        public
        initializer
    {
        Ownable.initialize(_nextOwner);
        _setRate(_initialRate);
    }

    function setExchangeRate(uint256 _nextRate) public onlyOwner {
        _setRate(_nextRate);
    }

    function exchangeRateCurrent() public view returns (uint256) {
        require(_rate != 0, "ERC20WithRate: rate has not been initialized");
        return _rate;
    }

    function _setRate(uint256 _nextRate) internal {
        require(_nextRate > 0, "ERC20WithRate: rate must be greater than zero");
        _rate = _nextRate;
    }

    function balanceOfUnderlying(address _account)
        public
        view
        returns (uint256)
    {
        return toUnderlying(balanceOf(_account));
    }

    function toUnderlying(uint256 _amount) public view returns (uint256) {
        return _amount.mul(_rate).div(_rateScale);
    }

    function fromUnderlying(uint256 _amountUnderlying)
        public
        view
        returns (uint256)
    {
        return _amountUnderlying.mul(_rateScale).div(_rate);
    }
}

contract ERC20WithPermit is Initializable, ERC20, ERC20Detailed {
    using SafeMath for uint256;

    mapping(address => uint256) public nonces;

    
    
    string public version;

    
    bytes32 public DOMAIN_SEPARATOR;
    
    
    bytes32 public constant PERMIT_TYPEHASH = 0xea2aa0a1be11a07ed86d755c93467f4f82362b452371d1ba94d1715123511acb;

    function initialize(
        uint256 _chainId,
        string memory _version,
        string memory _name,
        string memory _symbol,
        uint8 _decimals
    ) public initializer {
        ERC20Detailed.initialize(_name, _symbol, _decimals);
        version = _version;
        DOMAIN_SEPARATOR = keccak256(
            abi.encode(
                keccak256(
                    "EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"
                ),
                keccak256(bytes(name())),
                keccak256(bytes(version)),
                _chainId,
                address(this)
            )
        );
    }

    
    function permit(
        address holder,
        address spender,
        uint256 nonce,
        uint256 expiry,
        bool allowed,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external {
        bytes32 digest = keccak256(
            abi.encodePacked(
                "\x19\x01",
                DOMAIN_SEPARATOR,
                keccak256(
                    abi.encode(
                        PERMIT_TYPEHASH,
                        holder,
                        spender,
                        nonce,
                        expiry,
                        allowed
                    )
                )
            )
        );

        require(holder != address(0), "ERC20WithRate: address must not be 0x0");
        require(
            holder == ecrecover(digest, v, r, s),
            "ERC20WithRate: invalid signature"
        );
        require(
            expiry == 0 || now <= expiry,
            "ERC20WithRate: permit has expired"
        );
        require(nonce == nonces[holder]++, "ERC20WithRate: invalid nonce");
        uint256 amount = allowed ? uint256(-1) : 0;
        _approve(holder, spender, amount);
    }
}

contract RenERC20LogicV1 is
    Initializable,
    ERC20,
    ERC20Detailed,
    ERC20WithRate,
    ERC20WithPermit,
    Claimable,
    CanReclaimTokens
{
    
    function initialize(
        uint256 _chainId,
        address _nextOwner,
        uint256 _initialRate,
        string memory _version,
        string memory _name,
        string memory _symbol,
        uint8 _decimals
    ) public initializer {
        ERC20Detailed.initialize(_name, _symbol, _decimals);
        ERC20WithRate.initialize(_nextOwner, _initialRate);
        ERC20WithPermit.initialize(
            _chainId,
            _version,
            _name,
            _symbol,
            _decimals
        );
        Claimable.initialize(_nextOwner);
        CanReclaimTokens.initialize(_nextOwner);
    }

    
    
    function mint(address _to, uint256 _amount) public onlyOwner {
        _mint(_to, _amount);
    }

    
    
    function burn(address _from, uint256 _amount) public onlyOwner {
        _burn(_from, _amount);
    }

    function transfer(address recipient, uint256 amount) public returns (bool) {
        
        
        
        require(
            recipient != address(this),
            "RenERC20: can't transfer to token address"
        );
        return super.transfer(recipient, amount);
    }

    function transferFrom(address sender, address recipient, uint256 amount)
        public
        returns (bool)
    {
        
        
        require(
            recipient != address(this),
            "RenERC20: can't transfer to token address"
        );
        return super.transferFrom(sender, recipient, amount);
    }
}

contract RenBTC is InitializableAdminUpgradeabilityProxy {}

contract RenZEC is InitializableAdminUpgradeabilityProxy {}

contract RenBCH is InitializableAdminUpgradeabilityProxy {}

Contract Security Audit

Contract ABI

[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"_rate","type":"uint256"}],"name":"LogRateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"constant":true,"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"PERMIT_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"_rateScale","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"balanceOfUnderlying","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"blacklistRecoverableToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"burn","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"claimOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"exchangeRateCurrent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"_amountUnderlying","type":"uint256"}],"name":"fromUnderlying","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"uint8","name":"decimals","type":"uint8"}],"name":"initialize","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_chainId","type":"uint256"},{"internalType":"address","name":"_nextOwner","type":"address"},{"internalType":"uint256","name":"_initialRate","type":"uint256"},{"internalType":"string","name":"_version","type":"string"},{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"uint8","name":"_decimals","type":"uint8"}],"name":"initialize","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_chainId","type":"uint256"},{"internalType":"string","name":"_version","type":"string"},{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"uint8","name":"_decimals","type":"uint8"}],"name":"initialize","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_nextOwner","type":"address"}],"name":"initialize","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_nextOwner","type":"address"},{"internalType":"uint256","name":"_initialRate","type":"uint256"}],"name":"initialize","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mint","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint256","name":"expiry","type":"uint256"},{"internalType":"bool","name":"allowed","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"recoverTokens","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_nextRate","type":"uint256"}],"name":"setExchangeRate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"toUnderlying","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"version","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"}]

6080604052612c4d806100136000396000f3fe608060405234801561001057600080fd5b50600436106102275760003560e01c8063715018a611610130578063a9059cbb116100b8578063dd62ed3e1161007c578063dd62ed3e14610ad6578063e30c397814610b04578063eb438fc214610b0c578063f2fde38b14610b29578063f65d901c14610b4f57610227565b8063a9059cbb14610a33578063bd6d894d14610a5f578063c4d66de814610a67578063cd6dc68714610a8d578063db068e0e14610ab957610227565b80638fcbaf0c116100ff5780638fcbaf0c1461095c57806395d89b41146109b65780639dc29fac146109be578063a173b2f6146109ea578063a457c2d714610a0757610227565b8063715018a6146109025780637ecebe001461090a5780638da5cb5b146109305780638f32d59b1461095457610227565b80633644e515116101b35780634e71e0c8116101825780634e71e0c81461054357806353531e391461054b57806354fd4d501461071a5780635dca34521461072257806370a08231146108dc57610227565b80633644e515146104bd57806339509351146104c55780633af9e669146104f157806340c10f191461051757610227565b806318160ddd116101fa57806318160ddd1461043f57806323b872dd1461045957806325e27ed81461048f57806330adf81f14610497578063313ce5671461049f57610227565b806306fdde031461022c578063095ea7b3146102a957806316114acd146102e95780631624f6c614610311575b600080fd5b610234610b75565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561026e578181015183820152602001610256565b50505050905090810190601f16801561029b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102d5600480360360408110156102bf57600080fd5b506001600160a01b038135169060200135610c0c565b604080519115158252519081900360200190f35b61030f600480360360208110156102ff57600080fd5b50356001600160a01b0316610c2a565b005b61030f6004803603606081101561032757600080fd5b810190602081018135600160201b81111561034157600080fd5b82018360208201111561035357600080fd5b803590602001918460018302840111600160201b8311171561037457600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b8111156103c657600080fd5b8201836020820111156103d857600080fd5b803590602001918460018302840111600160201b831117156103f957600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295505050903560ff169150610d9b9050565b610447610e77565b60408051918252519081900360200190f35b6102d56004803603606081101561046f57600080fd5b506001600160a01b03813581169160208101359091169060400135610e7d565b610447610eda565b610447610ee6565b6104a7610f0a565b6040805160ff9092168252519081900360200190f35b610447610f13565b6102d5600480360360408110156104db57600080fd5b506001600160a01b038135169060200135610f19565b6104476004803603602081101561050757600080fd5b50356001600160a01b0316610f72565b61030f6004803603604081101561052d57600080fd5b506001600160a01b038135169060200135610f85565b61030f610fda565b61030f600480360360e081101561056157600080fd5b8135916001600160a01b036020820135169160408201359190810190608081016060820135600160201b81111561059757600080fd5b8201836020820111156105a957600080fd5b803590602001918460018302840111600160201b831117156105ca57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b81111561061c57600080fd5b82018360208201111561062e57600080fd5b803590602001918460018302840111600160201b8311171561064f57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b8111156106a157600080fd5b8201836020820111156106b357600080fd5b803590602001918460018302840111600160201b831117156106d457600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295505050903560ff16915061105a9050565b610234611137565b61030f600480360360a081101561073857600080fd5b81359190810190604081016020820135600160201b81111561075957600080fd5b82018360208201111561076b57600080fd5b803590602001918460018302840111600160201b8311171561078c57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b8111156107de57600080fd5b8201836020820111156107f057600080fd5b803590602001918460018302840111600160201b8311171561081157600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b81111561086357600080fd5b82018360208201111561087557600080fd5b803590602001918460018302840111600160201b8311171561089657600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295505050903560ff1691506111c59050565b610447600480360360208110156108f257600080fd5b50356001600160a01b0316611360565b61030f61137b565b6104476004803603602081101561092057600080fd5b50356001600160a01b031661140c565b61093861141e565b604080516001600160a01b039092168252519081900360200190f35b6102d561142d565b61030f600480360361010081101561097357600080fd5b506001600160a01b038135811691602081013590911690604081013590606081013590608081013515159060ff60a0820135169060c08101359060e00135611453565b6102346116f2565b61030f600480360360408110156109d457600080fd5b506001600160a01b038135169060200135611753565b61044760048036036020811015610a0057600080fd5b50356117a4565b6102d560048036036040811015610a1d57600080fd5b506001600160a01b0381351690602001356117d2565b6102d560048036036040811015610a4957600080fd5b506001600160a01b038135169060200135611840565b61044761189b565b61030f60048036036020811015610a7d57600080fd5b50356001600160a01b03166118e6565b61030f60048036036040811015610aa357600080fd5b506001600160a01b038135169060200135611991565b61030f60048036036020811015610acf57600080fd5b5035611a47565b61044760048036036040811015610aec57600080fd5b506001600160a01b0381358116916020013516611a97565b610938611ac2565b61044760048036036020811015610b2257600080fd5b5035611ad1565b61030f60048036036020811015610b3f57600080fd5b50356001600160a01b0316611af4565b61030f60048036036020811015610b6557600080fd5b50356001600160a01b0316611be5565b609b8054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610c015780601f10610bd657610100808354040283529160200191610c01565b820191906000526020600020905b815481529060010190602001808311610be457829003601f168201915b505050505090505b90565b6000610c20610c19611c50565b8484611c54565b5060015b92915050565b610c3261142d565b610c71576040805162461bcd60e51b81526020600482018190526024820152600080516020612a6c833981519152604482015290519081900360640190fd5b6001600160a01b038116600090815260d5602052604090205460ff1615610cc95760405162461bcd60e51b815260040180806020018281038252602a815260200180612934602a913960400191505060405180910390fd5b6001600160a01b038116610d095760405133904780156108fc02916000818181858888f19350505050158015610d03573d6000803e3d6000fd5b50610d98565b604080516370a0823160e01b81523060048201529051610d989133916001600160a01b038516916370a08231916024808301926020929190829003018186803b158015610d5557600080fd5b505afa158015610d69573d6000803e3d6000fd5b505050506040513d6020811015610d7f57600080fd5b50516001600160a01b038416919063ffffffff611d4016565b50565b600054610100900460ff1680610db45750610db4611d92565b80610dc2575060005460ff16155b610dfd5760405162461bcd60e51b815260040180806020018281038252602e815260200180612a8c602e913960400191505060405180910390fd5b600054610100900460ff16158015610e28576000805460ff1961ff0019909116610100171660011790555b8351610e3b90609b90602087019061280e565b508251610e4f90609c90602086019061280e565b50609d805460ff191660ff84161790558015610e71576000805461ff00191690555b50505050565b60685490565b60006001600160a01b038316301415610ec75760405162461bcd60e51b8152600401808060200182810382526029815260200180612b2a6029913960400191505060405180910390fd5b610ed2848484611d98565b949350505050565b670de0b6b3a764000081565b7fea2aa0a1be11a07ed86d755c93467f4f82362b452371d1ba94d1715123511acb81565b609d5460ff1690565b60d35481565b6000610c20610f26611c50565b84610f6d8560676000610f37611c50565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549063ffffffff611e2016565b611c54565b6000610c24610f8083611360565b611ad1565b610f8d61142d565b610fcc576040805162461bcd60e51b81526020600482018190526024820152600080516020612a6c833981519152604482015290519081900360640190fd5b610fd68282611e7a565b5050565b60d4546001600160a01b0316610fee611c50565b6001600160a01b0316146110335760405162461bcd60e51b815260040180806020018281038252602a815260200180612adb602a913960400191505060405180910390fd5b60d454611048906001600160a01b0316611f6c565b60d480546001600160a01b0319169055565b600054610100900460ff16806110735750611073611d92565b80611081575060005460ff16155b6110bc5760405162461bcd60e51b815260040180806020018281038252602e815260200180612a8c602e913960400191505060405180910390fd5b600054610100900460ff161580156110e7576000805460ff1961ff0019909116610100171660011790555b6110f2848484610d9b565b6110fc8787611991565b61110988868686866111c5565b6111128761200d565b61111b876118e6565b801561112d576000805461ff00191690555b5050505050505050565b60d2805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156111bd5780601f10611192576101008083540402835291602001916111bd565b820191906000526020600020905b8154815290600101906020018083116111a057829003601f168201915b505050505081565b600054610100900460ff16806111de57506111de611d92565b806111ec575060005460ff16155b6112275760405162461bcd60e51b815260040180806020018281038252602e815260200180612a8c602e913960400191505060405180910390fd5b600054610100900460ff16158015611252576000805460ff1961ff0019909116610100171660011790555b61125d848484610d9b565b84516112709060d290602088019061280e565b506040518060526129d1823960520190506040518091039020611291610b75565b8051906020012060d260405180828054600181600116156101000203166002900480156112f55780601f106112d35761010080835404028352918201916112f5565b820191906000526020600020905b8154815290600101906020018083116112e1575b505060408051918290038220602080840197909752828201959095526060820194909452608081018b90523060a0808301919091528451808303909101815260c09091019093525050805191012060d3558015611358576000805461ff00191690555b505050505050565b6001600160a01b031660009081526066602052604090205490565b61138361142d565b6113c2576040805162461bcd60e51b81526020600482018190526024820152600080516020612a6c833981519152604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b60d16020526000908152604090205481565b6033546001600160a01b031690565b6033546000906001600160a01b0316611444611c50565b6001600160a01b031614905090565b60d354604080517fea2aa0a1be11a07ed86d755c93467f4f82362b452371d1ba94d1715123511acb6020808301919091526001600160a01b03808d16838501819052908c166060840152608083018b905260a083018a905288151560c0808501919091528451808503909101815260e08401855280519083012061190160f01b610100850152610102840195909552610122808401959095528351808403909501855261014290920190925282519290910191909120906115455760405162461bcd60e51b8152600401808060200182810382526026815260200180612bf36026913960400191505060405180910390fd5b6040805160008152602080820180845284905260ff8716828401526060820186905260808201859052915160019260a0808401939192601f1981019281900390910190855afa15801561159c573d6000803e3d6000fd5b505050602060405103516001600160a01b0316896001600160a01b03161461160b576040805162461bcd60e51b815260206004820181905260248201527f455243323057697468526174653a20696e76616c6964207369676e6174757265604482015290519081900360640190fd5b8515806116185750854211155b6116535760405162461bcd60e51b81526004018080602001828103825260218152602001806129b06021913960400191505060405180910390fd5b6001600160a01b038916600090815260d16020526040902080546001810190915587146116c7576040805162461bcd60e51b815260206004820152601c60248201527f455243323057697468526174653a20696e76616c6964206e6f6e636500000000604482015290519081900360640190fd5b6000856116d55760006116d9565b6000195b90506116e68a8a83611c54565b50505050505050505050565b609c8054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610c015780601f10610bd657610100808354040283529160200191610c01565b61175b61142d565b61179a576040805162461bcd60e51b81526020600482018190526024820152600080516020612a6c833981519152604482015290519081900360640190fd5b610fd682826120a3565b60d054600090610c24906117c684670de0b6b3a764000063ffffffff61219f16565b9063ffffffff6121f816565b6000610c206117df611c50565b84610f6d85604051806060016040528060258152602001612bce6025913960676000611809611c50565b6001600160a01b03908116825260208083019390935260409182016000908120918d1681529252902054919063ffffffff61223a16565b60006001600160a01b03831630141561188a5760405162461bcd60e51b8152600401808060200182810382526029815260200180612b2a6029913960400191505060405180910390fd5b61189483836122d1565b9392505050565b600060d054600014156118df5760405162461bcd60e51b815260040180806020018281038252602c81526020018061295e602c913960400191505060405180910390fd5b5060d05490565b600054610100900460ff16806118ff57506118ff611d92565b8061190d575060005460ff16155b6119485760405162461bcd60e51b815260040180806020018281038252602e815260200180612a8c602e913960400191505060405180910390fd5b600054610100900460ff16158015611973576000805460ff1961ff0019909116610100171660011790555b61197c8261200d565b8015610fd6576000805461ff00191690555050565b600054610100900460ff16806119aa57506119aa611d92565b806119b8575060005460ff16155b6119f35760405162461bcd60e51b815260040180806020018281038252602e815260200180612a8c602e913960400191505060405180910390fd5b600054610100900460ff16158015611a1e576000805460ff1961ff0019909116610100171660011790555b611a27836122e5565b611a30826123d6565b8015611a42576000805461ff00191690555b505050565b611a4f61142d565b611a8e576040805162461bcd60e51b81526020600482018190526024820152600080516020612a6c833981519152604482015290519081900360640190fd5b610d98816123d6565b6001600160a01b03918216600090815260676020908152604080832093909416825291909152205490565b60d4546001600160a01b031681565b6000610c24670de0b6b3a76400006117c660d0548561219f90919063ffffffff16565b611afc61142d565b611b3b576040805162461bcd60e51b81526020600482018190526024820152600080516020612a6c833981519152604482015290519081900360640190fd5b611b4361141e565b6001600160a01b0316816001600160a01b031614158015611b72575060d4546001600160a01b03828116911614155b611bc3576040805162461bcd60e51b815260206004820152601c60248201527f436c61696d61626c653a20696e76616c6964206e6577206f776e657200000000604482015290519081900360640190fd5b60d480546001600160a01b0319166001600160a01b0392909216919091179055565b611bed61142d565b611c2c576040805162461bcd60e51b81526020600482018190526024820152600080516020612a6c833981519152604482015290519081900360640190fd5b6001600160a01b0316600090815260d560205260409020805460ff19166001179055565b3390565b6001600160a01b038316611c995760405162461bcd60e51b8152600401808060200182810382526024815260200180612b536024913960400191505060405180910390fd5b6001600160a01b038216611cde5760405162461bcd60e51b81526004018080602001828103825260228152602001806129126022913960400191505060405180910390fd5b6001600160a01b03808416600081815260676020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052611a4290849061241a565b303b1590565b6000611da58484846125d2565b611e1684611db1611c50565b610f6d85604051806060016040528060288152602001612a44602891396001600160a01b038a16600090815260676020526040812090611def611c50565b6001600160a01b03168152602081019190915260400160002054919063ffffffff61223a16565b5060019392505050565b600082820183811015611894576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6001600160a01b038216611ed5576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b606854611ee8908263ffffffff611e2016565b6068556001600160a01b038216600090815260666020526040902054611f14908263ffffffff611e2016565b6001600160a01b03831660008181526066602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6001600160a01b038116611fb15760405162461bcd60e51b81526004018080602001828103825260268152602001806128ec6026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b600054610100900460ff16806120265750612026611d92565b80612034575060005460ff16155b61206f5760405162461bcd60e51b815260040180806020018281038252602e815260200180612a8c602e913960400191505060405180910390fd5b600054610100900460ff1615801561209a576000805460ff1961ff0019909116610100171660011790555b61197c826122e5565b6001600160a01b0382166120e85760405162461bcd60e51b8152600401808060200182810382526021815260200180612aba6021913960400191505060405180910390fd5b61212b816040518060600160405280602281526020016128ca602291396001600160a01b038516600090815260666020526040902054919063ffffffff61223a16565b6001600160a01b038316600090815260666020526040902055606854612157908263ffffffff61273016565b6068556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b6000826121ae57506000610c24565b828202828482816121bb57fe5b04146118945760405162461bcd60e51b8152600401808060200182810382526021815260200180612a236021913960400191505060405180910390fd5b600061189483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612772565b600081848411156122c95760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561228e578181015183820152602001612276565b50505050905090810190601f1680156122bb5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6000610c206122de611c50565b84846125d2565b600054610100900460ff16806122fe57506122fe611d92565b8061230c575060005460ff16155b6123475760405162461bcd60e51b815260040180806020018281038252602e815260200180612a8c602e913960400191505060405180910390fd5b600054610100900460ff16158015612372576000805460ff1961ff0019909116610100171660011790555b603380546001600160a01b0319166001600160a01b0384811691909117918290556040519116906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a38015610fd6576000805461ff00191690555050565b600081116124155760405162461bcd60e51b815260040180806020018281038252602d815260200180612b77602d913960400191505060405180910390fd5b60d055565b61242c826001600160a01b03166127d7565b61247d576040805162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015290519081900360640190fd5b60006060836001600160a01b0316836040518082805190602001908083835b602083106124bb5780518252601f19909201916020918201910161249c565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461251d576040519150601f19603f3d011682016040523d82523d6000602084013e612522565b606091505b509150915081612579576040805162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b805115610e715780806020019051602081101561259557600080fd5b5051610e715760405162461bcd60e51b815260040180806020018281038252602a815260200180612ba4602a913960400191505060405180910390fd5b6001600160a01b0383166126175760405162461bcd60e51b8152600401808060200182810382526025815260200180612b056025913960400191505060405180910390fd5b6001600160a01b03821661265c5760405162461bcd60e51b81526004018080602001828103825260238152602001806128a76023913960400191505060405180910390fd5b61269f8160405180606001604052806026815260200161298a602691396001600160a01b038616600090815260666020526040902054919063ffffffff61223a16565b6001600160a01b0380851660009081526066602052604080822093909355908416815220546126d4908263ffffffff611e2016565b6001600160a01b0380841660008181526066602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600061189483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061223a565b600081836127c15760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561228e578181015183820152602001612276565b5060008385816127cd57fe5b0495945050505050565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4708115801590610ed25750141592915050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061284f57805160ff191683800117855561287c565b8280016001018555821561287c579182015b8281111561287c578251825591602001919060010190612861565b5061288892915061288c565b5090565b610c0991905b80821115612888576000815560010161289256fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e63654f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737343616e5265636c61696d546f6b656e733a20746f6b656e206973206e6f74207265636f76657261626c65455243323057697468526174653a207261746520686173206e6f74206265656e20696e697469616c697a656445524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365455243323057697468526174653a207065726d6974206861732065787069726564454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a656445524332303a206275726e2066726f6d20746865207a65726f2061646472657373436c61696d61626c653a2063616c6c6572206973206e6f74207468652070656e64696e67206f776e657245524332303a207472616e736665722066726f6d20746865207a65726f206164647265737352656e45524332303a2063616e2774207472616e7366657220746f20746f6b656e206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f2061646472657373455243323057697468526174653a2072617465206d7573742062652067726561746572207468616e207a65726f5361666545524332303a204552433230206f7065726174696f6e20646964206e6f74207375636365656445524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f455243323057697468526174653a2061646472657373206d757374206e6f7420626520307830a265627a7a723158208041b4da1e811475b01056cb492bd65274acbaa894f61093e737202c34c167c964736f6c63430005100032

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106102275760003560e01c8063715018a611610130578063a9059cbb116100b8578063dd62ed3e1161007c578063dd62ed3e14610ad6578063e30c397814610b04578063eb438fc214610b0c578063f2fde38b14610b29578063f65d901c14610b4f57610227565b8063a9059cbb14610a33578063bd6d894d14610a5f578063c4d66de814610a67578063cd6dc68714610a8d578063db068e0e14610ab957610227565b80638fcbaf0c116100ff5780638fcbaf0c1461095c57806395d89b41146109b65780639dc29fac146109be578063a173b2f6146109ea578063a457c2d714610a0757610227565b8063715018a6146109025780637ecebe001461090a5780638da5cb5b146109305780638f32d59b1461095457610227565b80633644e515116101b35780634e71e0c8116101825780634e71e0c81461054357806353531e391461054b57806354fd4d501461071a5780635dca34521461072257806370a08231146108dc57610227565b80633644e515146104bd57806339509351146104c55780633af9e669146104f157806340c10f191461051757610227565b806318160ddd116101fa57806318160ddd1461043f57806323b872dd1461045957806325e27ed81461048f57806330adf81f14610497578063313ce5671461049f57610227565b806306fdde031461022c578063095ea7b3146102a957806316114acd146102e95780631624f6c614610311575b600080fd5b610234610b75565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561026e578181015183820152602001610256565b50505050905090810190601f16801561029b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102d5600480360360408110156102bf57600080fd5b506001600160a01b038135169060200135610c0c565b604080519115158252519081900360200190f35b61030f600480360360208110156102ff57600080fd5b50356001600160a01b0316610c2a565b005b61030f6004803603606081101561032757600080fd5b810190602081018135600160201b81111561034157600080fd5b82018360208201111561035357600080fd5b803590602001918460018302840111600160201b8311171561037457600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b8111156103c657600080fd5b8201836020820111156103d857600080fd5b803590602001918460018302840111600160201b831117156103f957600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295505050903560ff169150610d9b9050565b610447610e77565b60408051918252519081900360200190f35b6102d56004803603606081101561046f57600080fd5b506001600160a01b03813581169160208101359091169060400135610e7d565b610447610eda565b610447610ee6565b6104a7610f0a565b6040805160ff9092168252519081900360200190f35b610447610f13565b6102d5600480360360408110156104db57600080fd5b506001600160a01b038135169060200135610f19565b6104476004803603602081101561050757600080fd5b50356001600160a01b0316610f72565b61030f6004803603604081101561052d57600080fd5b506001600160a01b038135169060200135610f85565b61030f610fda565b61030f600480360360e081101561056157600080fd5b8135916001600160a01b036020820135169160408201359190810190608081016060820135600160201b81111561059757600080fd5b8201836020820111156105a957600080fd5b803590602001918460018302840111600160201b831117156105ca57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b81111561061c57600080fd5b82018360208201111561062e57600080fd5b803590602001918460018302840111600160201b8311171561064f57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b8111156106a157600080fd5b8201836020820111156106b357600080fd5b803590602001918460018302840111600160201b831117156106d457600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295505050903560ff16915061105a9050565b610234611137565b61030f600480360360a081101561073857600080fd5b81359190810190604081016020820135600160201b81111561075957600080fd5b82018360208201111561076b57600080fd5b803590602001918460018302840111600160201b8311171561078c57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b8111156107de57600080fd5b8201836020820111156107f057600080fd5b803590602001918460018302840111600160201b8311171561081157600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b81111561086357600080fd5b82018360208201111561087557600080fd5b803590602001918460018302840111600160201b8311171561089657600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295505050903560ff1691506111c59050565b610447600480360360208110156108f257600080fd5b50356001600160a01b0316611360565b61030f61137b565b6104476004803603602081101561092057600080fd5b50356001600160a01b031661140c565b61093861141e565b604080516001600160a01b039092168252519081900360200190f35b6102d561142d565b61030f600480360361010081101561097357600080fd5b506001600160a01b038135811691602081013590911690604081013590606081013590608081013515159060ff60a0820135169060c08101359060e00135611453565b6102346116f2565b61030f600480360360408110156109d457600080fd5b506001600160a01b038135169060200135611753565b61044760048036036020811015610a0057600080fd5b50356117a4565b6102d560048036036040811015610a1d57600080fd5b506001600160a01b0381351690602001356117d2565b6102d560048036036040811015610a4957600080fd5b506001600160a01b038135169060200135611840565b61044761189b565b61030f60048036036020811015610a7d57600080fd5b50356001600160a01b03166118e6565b61030f60048036036040811015610aa357600080fd5b506001600160a01b038135169060200135611991565b61030f60048036036020811015610acf57600080fd5b5035611a47565b61044760048036036040811015610aec57600080fd5b506001600160a01b0381358116916020013516611a97565b610938611ac2565b61044760048036036020811015610b2257600080fd5b5035611ad1565b61030f60048036036020811015610b3f57600080fd5b50356001600160a01b0316611af4565b61030f60048036036020811015610b6557600080fd5b50356001600160a01b0316611be5565b609b8054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610c015780601f10610bd657610100808354040283529160200191610c01565b820191906000526020600020905b815481529060010190602001808311610be457829003601f168201915b505050505090505b90565b6000610c20610c19611c50565b8484611c54565b5060015b92915050565b610c3261142d565b610c71576040805162461bcd60e51b81526020600482018190526024820152600080516020612a6c833981519152604482015290519081900360640190fd5b6001600160a01b038116600090815260d5602052604090205460ff1615610cc95760405162461bcd60e51b815260040180806020018281038252602a815260200180612934602a913960400191505060405180910390fd5b6001600160a01b038116610d095760405133904780156108fc02916000818181858888f19350505050158015610d03573d6000803e3d6000fd5b50610d98565b604080516370a0823160e01b81523060048201529051610d989133916001600160a01b038516916370a08231916024808301926020929190829003018186803b158015610d5557600080fd5b505afa158015610d69573d6000803e3d6000fd5b505050506040513d6020811015610d7f57600080fd5b50516001600160a01b038416919063ffffffff611d4016565b50565b600054610100900460ff1680610db45750610db4611d92565b80610dc2575060005460ff16155b610dfd5760405162461bcd60e51b815260040180806020018281038252602e815260200180612a8c602e913960400191505060405180910390fd5b600054610100900460ff16158015610e28576000805460ff1961ff0019909116610100171660011790555b8351610e3b90609b90602087019061280e565b508251610e4f90609c90602086019061280e565b50609d805460ff191660ff84161790558015610e71576000805461ff00191690555b50505050565b60685490565b60006001600160a01b038316301415610ec75760405162461bcd60e51b8152600401808060200182810382526029815260200180612b2a6029913960400191505060405180910390fd5b610ed2848484611d98565b949350505050565b670de0b6b3a764000081565b7fea2aa0a1be11a07ed86d755c93467f4f82362b452371d1ba94d1715123511acb81565b609d5460ff1690565b60d35481565b6000610c20610f26611c50565b84610f6d8560676000610f37611c50565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549063ffffffff611e2016565b611c54565b6000610c24610f8083611360565b611ad1565b610f8d61142d565b610fcc576040805162461bcd60e51b81526020600482018190526024820152600080516020612a6c833981519152604482015290519081900360640190fd5b610fd68282611e7a565b5050565b60d4546001600160a01b0316610fee611c50565b6001600160a01b0316146110335760405162461bcd60e51b815260040180806020018281038252602a815260200180612adb602a913960400191505060405180910390fd5b60d454611048906001600160a01b0316611f6c565b60d480546001600160a01b0319169055565b600054610100900460ff16806110735750611073611d92565b80611081575060005460ff16155b6110bc5760405162461bcd60e51b815260040180806020018281038252602e815260200180612a8c602e913960400191505060405180910390fd5b600054610100900460ff161580156110e7576000805460ff1961ff0019909116610100171660011790555b6110f2848484610d9b565b6110fc8787611991565b61110988868686866111c5565b6111128761200d565b61111b876118e6565b801561112d576000805461ff00191690555b5050505050505050565b60d2805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156111bd5780601f10611192576101008083540402835291602001916111bd565b820191906000526020600020905b8154815290600101906020018083116111a057829003601f168201915b505050505081565b600054610100900460ff16806111de57506111de611d92565b806111ec575060005460ff16155b6112275760405162461bcd60e51b815260040180806020018281038252602e815260200180612a8c602e913960400191505060405180910390fd5b600054610100900460ff16158015611252576000805460ff1961ff0019909116610100171660011790555b61125d848484610d9b565b84516112709060d290602088019061280e565b506040518060526129d1823960520190506040518091039020611291610b75565b8051906020012060d260405180828054600181600116156101000203166002900480156112f55780601f106112d35761010080835404028352918201916112f5565b820191906000526020600020905b8154815290600101906020018083116112e1575b505060408051918290038220602080840197909752828201959095526060820194909452608081018b90523060a0808301919091528451808303909101815260c09091019093525050805191012060d3558015611358576000805461ff00191690555b505050505050565b6001600160a01b031660009081526066602052604090205490565b61138361142d565b6113c2576040805162461bcd60e51b81526020600482018190526024820152600080516020612a6c833981519152604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b60d16020526000908152604090205481565b6033546001600160a01b031690565b6033546000906001600160a01b0316611444611c50565b6001600160a01b031614905090565b60d354604080517fea2aa0a1be11a07ed86d755c93467f4f82362b452371d1ba94d1715123511acb6020808301919091526001600160a01b03808d16838501819052908c166060840152608083018b905260a083018a905288151560c0808501919091528451808503909101815260e08401855280519083012061190160f01b610100850152610102840195909552610122808401959095528351808403909501855261014290920190925282519290910191909120906115455760405162461bcd60e51b8152600401808060200182810382526026815260200180612bf36026913960400191505060405180910390fd5b6040805160008152602080820180845284905260ff8716828401526060820186905260808201859052915160019260a0808401939192601f1981019281900390910190855afa15801561159c573d6000803e3d6000fd5b505050602060405103516001600160a01b0316896001600160a01b03161461160b576040805162461bcd60e51b815260206004820181905260248201527f455243323057697468526174653a20696e76616c6964207369676e6174757265604482015290519081900360640190fd5b8515806116185750854211155b6116535760405162461bcd60e51b81526004018080602001828103825260218152602001806129b06021913960400191505060405180910390fd5b6001600160a01b038916600090815260d16020526040902080546001810190915587146116c7576040805162461bcd60e51b815260206004820152601c60248201527f455243323057697468526174653a20696e76616c6964206e6f6e636500000000604482015290519081900360640190fd5b6000856116d55760006116d9565b6000195b90506116e68a8a83611c54565b50505050505050505050565b609c8054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610c015780601f10610bd657610100808354040283529160200191610c01565b61175b61142d565b61179a576040805162461bcd60e51b81526020600482018190526024820152600080516020612a6c833981519152604482015290519081900360640190fd5b610fd682826120a3565b60d054600090610c24906117c684670de0b6b3a764000063ffffffff61219f16565b9063ffffffff6121f816565b6000610c206117df611c50565b84610f6d85604051806060016040528060258152602001612bce6025913960676000611809611c50565b6001600160a01b03908116825260208083019390935260409182016000908120918d1681529252902054919063ffffffff61223a16565b60006001600160a01b03831630141561188a5760405162461bcd60e51b8152600401808060200182810382526029815260200180612b2a6029913960400191505060405180910390fd5b61189483836122d1565b9392505050565b600060d054600014156118df5760405162461bcd60e51b815260040180806020018281038252602c81526020018061295e602c913960400191505060405180910390fd5b5060d05490565b600054610100900460ff16806118ff57506118ff611d92565b8061190d575060005460ff16155b6119485760405162461bcd60e51b815260040180806020018281038252602e815260200180612a8c602e913960400191505060405180910390fd5b600054610100900460ff16158015611973576000805460ff1961ff0019909116610100171660011790555b61197c8261200d565b8015610fd6576000805461ff00191690555050565b600054610100900460ff16806119aa57506119aa611d92565b806119b8575060005460ff16155b6119f35760405162461bcd60e51b815260040180806020018281038252602e815260200180612a8c602e913960400191505060405180910390fd5b600054610100900460ff16158015611a1e576000805460ff1961ff0019909116610100171660011790555b611a27836122e5565b611a30826123d6565b8015611a42576000805461ff00191690555b505050565b611a4f61142d565b611a8e576040805162461bcd60e51b81526020600482018190526024820152600080516020612a6c833981519152604482015290519081900360640190fd5b610d98816123d6565b6001600160a01b03918216600090815260676020908152604080832093909416825291909152205490565b60d4546001600160a01b031681565b6000610c24670de0b6b3a76400006117c660d0548561219f90919063ffffffff16565b611afc61142d565b611b3b576040805162461bcd60e51b81526020600482018190526024820152600080516020612a6c833981519152604482015290519081900360640190fd5b611b4361141e565b6001600160a01b0316816001600160a01b031614158015611b72575060d4546001600160a01b03828116911614155b611bc3576040805162461bcd60e51b815260206004820152601c60248201527f436c61696d61626c653a20696e76616c6964206e6577206f776e657200000000604482015290519081900360640190fd5b60d480546001600160a01b0319166001600160a01b0392909216919091179055565b611bed61142d565b611c2c576040805162461bcd60e51b81526020600482018190526024820152600080516020612a6c833981519152604482015290519081900360640190fd5b6001600160a01b0316600090815260d560205260409020805460ff19166001179055565b3390565b6001600160a01b038316611c995760405162461bcd60e51b8152600401808060200182810382526024815260200180612b536024913960400191505060405180910390fd5b6001600160a01b038216611cde5760405162461bcd60e51b81526004018080602001828103825260228152602001806129126022913960400191505060405180910390fd5b6001600160a01b03808416600081815260676020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052611a4290849061241a565b303b1590565b6000611da58484846125d2565b611e1684611db1611c50565b610f6d85604051806060016040528060288152602001612a44602891396001600160a01b038a16600090815260676020526040812090611def611c50565b6001600160a01b03168152602081019190915260400160002054919063ffffffff61223a16565b5060019392505050565b600082820183811015611894576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6001600160a01b038216611ed5576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b606854611ee8908263ffffffff611e2016565b6068556001600160a01b038216600090815260666020526040902054611f14908263ffffffff611e2016565b6001600160a01b03831660008181526066602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6001600160a01b038116611fb15760405162461bcd60e51b81526004018080602001828103825260268152602001806128ec6026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b600054610100900460ff16806120265750612026611d92565b80612034575060005460ff16155b61206f5760405162461bcd60e51b815260040180806020018281038252602e815260200180612a8c602e913960400191505060405180910390fd5b600054610100900460ff1615801561209a576000805460ff1961ff0019909116610100171660011790555b61197c826122e5565b6001600160a01b0382166120e85760405162461bcd60e51b8152600401808060200182810382526021815260200180612aba6021913960400191505060405180910390fd5b61212b816040518060600160405280602281526020016128ca602291396001600160a01b038516600090815260666020526040902054919063ffffffff61223a16565b6001600160a01b038316600090815260666020526040902055606854612157908263ffffffff61273016565b6068556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b6000826121ae57506000610c24565b828202828482816121bb57fe5b04146118945760405162461bcd60e51b8152600401808060200182810382526021815260200180612a236021913960400191505060405180910390fd5b600061189483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612772565b600081848411156122c95760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561228e578181015183820152602001612276565b50505050905090810190601f1680156122bb5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6000610c206122de611c50565b84846125d2565b600054610100900460ff16806122fe57506122fe611d92565b8061230c575060005460ff16155b6123475760405162461bcd60e51b815260040180806020018281038252602e815260200180612a8c602e913960400191505060405180910390fd5b600054610100900460ff16158015612372576000805460ff1961ff0019909116610100171660011790555b603380546001600160a01b0319166001600160a01b0384811691909117918290556040519116906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a38015610fd6576000805461ff00191690555050565b600081116124155760405162461bcd60e51b815260040180806020018281038252602d815260200180612b77602d913960400191505060405180910390fd5b60d055565b61242c826001600160a01b03166127d7565b61247d576040805162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015290519081900360640190fd5b60006060836001600160a01b0316836040518082805190602001908083835b602083106124bb5780518252601f19909201916020918201910161249c565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461251d576040519150601f19603f3d011682016040523d82523d6000602084013e612522565b606091505b509150915081612579576040805162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b805115610e715780806020019051602081101561259557600080fd5b5051610e715760405162461bcd60e51b815260040180806020018281038252602a815260200180612ba4602a913960400191505060405180910390fd5b6001600160a01b0383166126175760405162461bcd60e51b8152600401808060200182810382526025815260200180612b056025913960400191505060405180910390fd5b6001600160a01b03821661265c5760405162461bcd60e51b81526004018080602001828103825260238152602001806128a76023913960400191505060405180910390fd5b61269f8160405180606001604052806026815260200161298a602691396001600160a01b038616600090815260666020526040902054919063ffffffff61223a16565b6001600160a01b0380851660009081526066602052604080822093909355908416815220546126d4908263ffffffff611e2016565b6001600160a01b0380841660008181526066602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600061189483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061223a565b600081836127c15760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561228e578181015183820152602001612276565b5060008385816127cd57fe5b0495945050505050565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4708115801590610ed25750141592915050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061284f57805160ff191683800117855561287c565b8280016001018555821561287c579182015b8281111561287c578251825591602001919060010190612861565b5061288892915061288c565b5090565b610c0991905b80821115612888576000815560010161289256fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e63654f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737343616e5265636c61696d546f6b656e733a20746f6b656e206973206e6f74207265636f76657261626c65455243323057697468526174653a207261746520686173206e6f74206265656e20696e697469616c697a656445524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365455243323057697468526174653a207065726d6974206861732065787069726564454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a656445524332303a206275726e2066726f6d20746865207a65726f2061646472657373436c61696d61626c653a2063616c6c6572206973206e6f74207468652070656e64696e67206f776e657245524332303a207472616e736665722066726f6d20746865207a65726f206164647265737352656e45524332303a2063616e2774207472616e7366657220746f20746f6b656e206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f2061646472657373455243323057697468526174653a2072617465206d7573742062652067726561746572207468616e207a65726f5361666545524332303a204552433230206f7065726174696f6e20646964206e6f74207375636365656445524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f455243323057697468526174653a2061646472657373206d757374206e6f7420626520307830a265627a7a723158208041b4da1e811475b01056cb492bd65274acbaa894f61093e737202c34c167c964736f6c63430005100032

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]

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.