Contract 0x00efcbd55b59b5d08f3a7501c0ddad34a57a3611

 

Contract Overview

Balance:
0 ETH

ETH Value:
$0.00

Token:
Txn Hash Method
Block
From
To
Value [Txn Fee]
0xe3e3a66596949b1c63733986b234808d08243ad6d72a0c2fd0e043bf5082ca6cPush Management89254942022-03-30 19:01:52729 days 10 hrs ago0x131b4e746ca5a5a8be68d2bb5f5a8533a4dd99c1 IN  0x00efcbd55b59b5d08f3a7501c0ddad34a57a36110 ETH0.000215056459 ETH0.464186031
0x056be01098bf55d5e170f4d037d99b83ecb9f9a79d36fe6c4f9fb07cc26f1e6aToggle89254392022-03-30 19:01:03729 days 10 hrs ago0x131b4e746ca5a5a8be68d2bb5f5a8533a4dd99c1 IN  0x00efcbd55b59b5d08f3a7501c0ddad34a57a36110 ETH0.000230174998 ETH0.464186031
0x530a9e726eb33621ccaf646114dd110d35de53d931a96fa42e15a79e7a59a839Queue89254242022-03-30 19:01:03729 days 10 hrs ago0x131b4e746ca5a5a8be68d2bb5f5a8533a4dd99c1 IN  0x00efcbd55b59b5d08f3a7501c0ddad34a57a36110 ETH0.000246548697 ETH0.464186031
0xdf17c28c9342b35523986a6b7112ce7719240e63597853a9eac015e32b07f424Toggle89251942022-03-30 18:58:43729 days 10 hrs ago0x131b4e746ca5a5a8be68d2bb5f5a8533a4dd99c1 IN  0x00efcbd55b59b5d08f3a7501c0ddad34a57a36110 ETH0.000229515854 ETH0.464186031
0x6976f49baaf215d9e496fe516216cfd250c12b1c55ca2e9ab0c5bcd0ad5d4e51Queue89251652022-03-30 18:58:20729 days 10 hrs ago0x131b4e746ca5a5a8be68d2bb5f5a8533a4dd99c1 IN  0x00efcbd55b59b5d08f3a7501c0ddad34a57a36110 ETH0.000246506456 ETH0.464186031
0x57ae467db2513d48ca9aad2ec975843d267d0f364cab0092589b49c2684d3f37Toggle89248322022-03-30 18:52:47729 days 11 hrs ago0x131b4e746ca5a5a8be68d2bb5f5a8533a4dd99c1 IN  0x00efcbd55b59b5d08f3a7501c0ddad34a57a36110 ETH0.000230143898 ETH0.464186031
0x3b004d0591612c2180f522c93107e8a812b196d3cd10a6bc6ab284bf29f4c4ddQueue89248182022-03-30 18:52:47729 days 11 hrs ago0x131b4e746ca5a5a8be68d2bb5f5a8533a4dd99c1 IN  0x00efcbd55b59b5d08f3a7501c0ddad34a57a36110 ETH0.000245870521 ETH0.464186031
0x3991de0db96f09e3266286bb33fac5f7324d12cc687b7bb1957fd76120eefcfdManage89247742022-03-30 18:51:20729 days 11 hrs ago0x6468f283f9d71d2dc28020c0dbe4458f3b47a2c6 IN  0x00efcbd55b59b5d08f3a7501c0ddad34a57a36110 ETH0.000228258374 ETH0.464186031
0x506d057ad80a9a4a50b1bb6f9b953b01f1e958e9f5b8247f92f57475a3af3dc3Toggle89245782022-03-30 18:47:18729 days 11 hrs ago0x131b4e746ca5a5a8be68d2bb5f5a8533a4dd99c1 IN  0x00efcbd55b59b5d08f3a7501c0ddad34a57a36110 ETH0.000229550204 ETH0.464186031
0xf65a73e7b82808ca7b61675cb1a8275c4e5a391a6b3f2a3bf6d469941ed9eac6Queue89245702022-03-30 18:46:39729 days 11 hrs ago0x131b4e746ca5a5a8be68d2bb5f5a8533a4dd99c1 IN  0x00efcbd55b59b5d08f3a7501c0ddad34a57a36110 ETH0.000245916011 ETH0.464186031
0x975814e26605ad3772d6f8d844722ce2f3fb909a2529acfd81404bd484e096beToggle89241302022-03-30 18:37:42729 days 11 hrs ago0x131b4e746ca5a5a8be68d2bb5f5a8533a4dd99c1 IN  0x00efcbd55b59b5d08f3a7501c0ddad34a57a36110 ETH0.000230190781 ETH0.464186031
0x2aaf38e718cfc4dc08c19b478e7b104e2b84e785d6f50f556793d5fea184f353Queue89241262022-03-30 18:37:42729 days 11 hrs ago0x131b4e746ca5a5a8be68d2bb5f5a8533a4dd99c1 IN  0x00efcbd55b59b5d08f3a7501c0ddad34a57a36110 ETH0.000245266615 ETH0.464186031
0xa56a3e3d0eb53239b8d110e58c2c2f0839b3db079161925e9dea24473826a387Toggle89240922022-03-30 18:37:17729 days 11 hrs ago0x131b4e746ca5a5a8be68d2bb5f5a8533a4dd99c1 IN  0x00efcbd55b59b5d08f3a7501c0ddad34a57a36110 ETH0.000228905914 ETH0.464186031
0x0704aff76ce1049634213a4f7f2db71561f1ece94e48c4f04932f121358c6382Queue89240852022-03-30 18:37:17729 days 11 hrs ago0x131b4e746ca5a5a8be68d2bb5f5a8533a4dd99c1 IN  0x00efcbd55b59b5d08f3a7501c0ddad34a57a36110 ETH0.000245907191 ETH0.464186031
0xcc4ddadc1c7da0debac5cfc7d6b18996e4475b8cdf89f663e32c9434bf35b679Toggle89240672022-03-30 18:36:19729 days 11 hrs ago0x131b4e746ca5a5a8be68d2bb5f5a8533a4dd99c1 IN  0x00efcbd55b59b5d08f3a7501c0ddad34a57a36110 ETH0.000230190781 ETH0.464186031
0x84b8f6d9d2895e39064ab3370c5699a8f84650e1e88e81fcc4b6849bec535fbcQueue89240562022-03-30 18:36:19729 days 11 hrs ago0x131b4e746ca5a5a8be68d2bb5f5a8533a4dd99c1 IN  0x00efcbd55b59b5d08f3a7501c0ddad34a57a36110 ETH0.000246547768 ETH0.464186031
0x6742a867db46f02bbe08a5c9ca79b5b530f8bc562dc27463c179a34c6c08c9ecToggle89238942022-03-30 18:31:55729 days 11 hrs ago0x131b4e746ca5a5a8be68d2bb5f5a8533a4dd99c1 IN  0x00efcbd55b59b5d08f3a7501c0ddad34a57a36110 ETH0.000229550204 ETH0.464186031
0x61a97bb824796e25f844ba58ad0ef70ba3cc9c90b9ab7690f905a048edfe7a3eQueue89238772022-03-30 18:31:55729 days 11 hrs ago0x131b4e746ca5a5a8be68d2bb5f5a8533a4dd99c1 IN  0x00efcbd55b59b5d08f3a7501c0ddad34a57a36110 ETH0.000246547768 ETH0.464186031
0x53d6ff535373a1658459d99e522f467535f21df567c396fd91b96e1a75aa5d95Pull Management89233682022-03-30 18:21:28729 days 11 hrs ago0x131b4e746ca5a5a8be68d2bb5f5a8533a4dd99c1 IN  0x00efcbd55b59b5d08f3a7501c0ddad34a57a36110 ETH0.000195407929 ETH0.464186031
0x33e5a42cb91308a3492965ab92349facdbe765b71aad884a2ac47663ac147103Push Management89233132022-03-30 18:20:22729 days 11 hrs ago0x6468f283f9d71d2dc28020c0dbe4458f3b47a2c6 IN  0x00efcbd55b59b5d08f3a7501c0ddad34a57a36110 ETH0.000215063422 ETH0.464186031
0xb03cd0139652ec8391dcc329f34cb7468b74f5960d26fb808ed4c81ac45ddf41Push Management89231422022-03-30 18:17:44729 days 11 hrs ago0x6468f283f9d71d2dc28020c0dbe4458f3b47a2c6 IN  0x00efcbd55b59b5d08f3a7501c0ddad34a57a36110 ETH0.000215703999 ETH0.464186031
0xc3311ec0bce0254efe0191baeb6f32d16f650cb1312836749e0b01eeb8bdc50cManage40475922021-12-23 19:25:02826 days 10 hrs ago0x6468f283f9d71d2dc28020c0dbe4458f3b47a2c6 IN  0x00efcbd55b59b5d08f3a7501c0ddad34a57a36110 ETH0.000692957654 ETH0.749871393
0x3cc99a44a6f84b0b96ccffc6bf99b9251ed8dc6f394aa9c65d44a7e57fbddbc0Manage34988032021-12-01 22:34:04848 days 7 hrs ago0x6468f283f9d71d2dc28020c0dbe4458f3b47a2c6 IN  0x00efcbd55b59b5d08f3a7501c0ddad34a57a36110 ETH0.000874016184 ETH1.206994617
0x6712f5f62dd21c0080b24a0e819954ea9bfd337a9909d7e73a39737f5aeabbafDeposit34987652021-12-01 22:32:31848 days 7 hrs ago0x6468f283f9d71d2dc28020c0dbe4458f3b47a2c6 IN  0x00efcbd55b59b5d08f3a7501c0ddad34a57a36110 ETH0.001137396893 ETH1.206994617
0x47adb06665f099d44b20ffb211b1f7837049f9c32f063c477354242695353aedToggle34987482021-12-01 22:31:57848 days 7 hrs ago0x6468f283f9d71d2dc28020c0dbe4458f3b47a2c6 IN  0x00efcbd55b59b5d08f3a7501c0ddad34a57a36110 ETH0.001354115191 ETH1.206994617
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x493acf6e15c6cbca992d2ef8682a111c8017bb599736c482fc243154acf77652239911032022-09-10 20:24:37565 days 9 hrs ago 0x191354562297ef98d95dbccc3dcd5a6d455bdb5e 0x00efcbd55b59b5d08f3a7501c0ddad34a57a36110 ETH
0x2e600c36ac47b998237299c8da29f58401f735585883736c725fc7621903aa52239910352022-09-10 20:23:48565 days 9 hrs ago 0x191354562297ef98d95dbccc3dcd5a6d455bdb5e 0x00efcbd55b59b5d08f3a7501c0ddad34a57a36110 ETH
0x0d8b1780740febd46dd129f7b3c5dc55ed1935d59674e1bb1ef99ded2def1b5a239909682022-09-10 20:23:05565 days 9 hrs ago 0x191354562297ef98d95dbccc3dcd5a6d455bdb5e 0x00efcbd55b59b5d08f3a7501c0ddad34a57a36110 ETH
0x516ae47758d2eac3a95b4ce430b5e33139a1deba5f08246239f3fd5c488f39c289925722022-03-31 19:26:20728 days 10 hrs ago Arbi's Finance: Multisig Treasury 0x00efcbd55b59b5d08f3a7501c0ddad34a57a36110 ETH
0x3991de0db96f09e3266286bb33fac5f7324d12cc687b7bb1957fd76120eefcfd89247742022-03-30 18:51:20729 days 11 hrs ago 0x00efcbd55b59b5d08f3a7501c0ddad34a57a3611 0x8b194beae1d3e0788a1a35173978001acdfba6680 ETH
0x3991de0db96f09e3266286bb33fac5f7324d12cc687b7bb1957fd76120eefcfd89247742022-03-30 18:51:20729 days 11 hrs ago 0x00efcbd55b59b5d08f3a7501c0ddad34a57a3611 0x8b194beae1d3e0788a1a35173978001acdfba6680 ETH
0x3991de0db96f09e3266286bb33fac5f7324d12cc687b7bb1957fd76120eefcfd89247742022-03-30 18:51:20729 days 11 hrs ago 0x00efcbd55b59b5d08f3a7501c0ddad34a57a3611 Wrapped Ether0 ETH
0x3991de0db96f09e3266286bb33fac5f7324d12cc687b7bb1957fd76120eefcfd89247742022-03-30 18:51:20729 days 11 hrs ago 0x00efcbd55b59b5d08f3a7501c0ddad34a57a3611 0xdb96f8efd6865644993505318cc08ff9c42fb9ac0 ETH
0x3991de0db96f09e3266286bb33fac5f7324d12cc687b7bb1957fd76120eefcfd89247742022-03-30 18:51:20729 days 11 hrs ago 0x00efcbd55b59b5d08f3a7501c0ddad34a57a3611 0xdb96f8efd6865644993505318cc08ff9c42fb9ac0 ETH
0x3991de0db96f09e3266286bb33fac5f7324d12cc687b7bb1957fd76120eefcfd89247742022-03-30 18:51:20729 days 11 hrs ago 0x00efcbd55b59b5d08f3a7501c0ddad34a57a3611 Wrapped Ether0 ETH
0x3991de0db96f09e3266286bb33fac5f7324d12cc687b7bb1957fd76120eefcfd89247742022-03-30 18:51:20729 days 11 hrs ago 0x00efcbd55b59b5d08f3a7501c0ddad34a57a3611 0x8b194beae1d3e0788a1a35173978001acdfba6680 ETH
0x3991de0db96f09e3266286bb33fac5f7324d12cc687b7bb1957fd76120eefcfd89247742022-03-30 18:51:20729 days 11 hrs ago 0x00efcbd55b59b5d08f3a7501c0ddad34a57a3611 0x8b194beae1d3e0788a1a35173978001acdfba6680 ETH
0x3991de0db96f09e3266286bb33fac5f7324d12cc687b7bb1957fd76120eefcfd89247742022-03-30 18:51:20729 days 11 hrs ago 0x00efcbd55b59b5d08f3a7501c0ddad34a57a3611 Wrapped Ether0 ETH
0x3991de0db96f09e3266286bb33fac5f7324d12cc687b7bb1957fd76120eefcfd89247742022-03-30 18:51:20729 days 11 hrs ago 0x00efcbd55b59b5d08f3a7501c0ddad34a57a3611 0xdb96f8efd6865644993505318cc08ff9c42fb9ac0 ETH
0x3991de0db96f09e3266286bb33fac5f7324d12cc687b7bb1957fd76120eefcfd89247742022-03-30 18:51:20729 days 11 hrs ago 0x00efcbd55b59b5d08f3a7501c0ddad34a57a3611 0xdb96f8efd6865644993505318cc08ff9c42fb9ac0 ETH
0x3991de0db96f09e3266286bb33fac5f7324d12cc687b7bb1957fd76120eefcfd89247742022-03-30 18:51:20729 days 11 hrs ago 0x00efcbd55b59b5d08f3a7501c0ddad34a57a3611 Wrapped Ether0 ETH
0xa431ea03d31720c17c9c455fff492fa004483820440679f2f423c9f4e0b4aaf357460902022-02-09 20:56:09778 days 9 hrs ago 0x00efcbd55b59b5d08f3a7501c0ddad34a57a3611 0xdb96f8efd6865644993505318cc08ff9c42fb9ac0 ETH
0xa431ea03d31720c17c9c455fff492fa004483820440679f2f423c9f4e0b4aaf357460902022-02-09 20:56:09778 days 9 hrs ago 0x00efcbd55b59b5d08f3a7501c0ddad34a57a3611 0xdb96f8efd6865644993505318cc08ff9c42fb9ac0 ETH
0xa431ea03d31720c17c9c455fff492fa004483820440679f2f423c9f4e0b4aaf357460902022-02-09 20:56:09778 days 9 hrs ago 0x191354562297ef98d95dbccc3dcd5a6d455bdb5e 0x00efcbd55b59b5d08f3a7501c0ddad34a57a36110 ETH
0x936c055817a2e545857fb2e707f2c9ea613bbdc0e97efd47df071b62d698efb256577832022-02-08 18:14:20779 days 11 hrs ago 0x00efcbd55b59b5d08f3a7501c0ddad34a57a3611 0xdb96f8efd6865644993505318cc08ff9c42fb9ac0 ETH
0x936c055817a2e545857fb2e707f2c9ea613bbdc0e97efd47df071b62d698efb256577832022-02-08 18:14:20779 days 11 hrs ago 0x00efcbd55b59b5d08f3a7501c0ddad34a57a3611 0xdb96f8efd6865644993505318cc08ff9c42fb9ac0 ETH
0x936c055817a2e545857fb2e707f2c9ea613bbdc0e97efd47df071b62d698efb256577832022-02-08 18:14:20779 days 11 hrs ago 0x191354562297ef98d95dbccc3dcd5a6d455bdb5e 0x00efcbd55b59b5d08f3a7501c0ddad34a57a36110 ETH
0xeb30b8b590377eb9f801723f5571f909f612fd2ff5c28facdcee043be53d826556003522022-02-07 23:36:02780 days 6 hrs ago 0x00efcbd55b59b5d08f3a7501c0ddad34a57a3611 0xdb96f8efd6865644993505318cc08ff9c42fb9ac0 ETH
0xeb30b8b590377eb9f801723f5571f909f612fd2ff5c28facdcee043be53d826556003522022-02-07 23:36:02780 days 6 hrs ago 0x00efcbd55b59b5d08f3a7501c0ddad34a57a3611 0xdb96f8efd6865644993505318cc08ff9c42fb9ac0 ETH
0xeb30b8b590377eb9f801723f5571f909f612fd2ff5c28facdcee043be53d826556003522022-02-07 23:36:02780 days 6 hrs ago 0x191354562297ef98d95dbccc3dcd5a6d455bdb5e 0x00efcbd55b59b5d08f3a7501c0ddad34a57a36110 ETH
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
ZeroTwOhmTreasury

Compiler Version
v0.7.5+commit.eb77ed08

Optimization Enabled:
Yes with 100 runs

Other Settings:
default evmVersion
File 1 of 1 : Treasury.sol
// SPDX-License-Identifier: AGPL-3.0-or-later
pragma solidity 0.7.5;

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 add32(uint32 a, uint32 b) internal pure returns (uint32) {
        uint32 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 mul32(uint32 a, uint32 b) internal pure returns (uint32) {
        if (a == 0) {
            return 0;
        }

        uint32 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;
    }
}

library Address {

  function isContract(address account) internal view returns (bool) {
        // This method relies in extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        // solhint-disable-next-line no-inline-assembly
        assembly { size := extcodesize(account) }
        return size > 0;
    }

    function functionCall(
        address target, 
        bytes memory data, 
        string memory errorMessage
    ) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    function _functionCallWithValue(
        address target, 
        bytes memory data, 
        uint256 weiValue, 
        string memory errorMessage
    ) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            if (returndata.length > 0) {
                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }

    function _verifyCallResult(
        bool success, 
        bytes memory returndata, 
        string memory errorMessage
    ) private pure returns(bytes memory) {
        if (success) {
            return returndata;
        } else {
            if (returndata.length > 0) {
                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

interface IOwnable {
  function manager() external view returns (address);

  function renounceManagement() external;
  
  function pushManagement( address newOwner_ ) external;
  
  function pullManagement() external;
}

contract Ownable is IOwnable {

    address internal _owner;
    address internal _newOwner;

    event OwnershipPushed(address indexed previousOwner, address indexed newOwner);
    event OwnershipPulled(address indexed previousOwner, address indexed newOwner);

    constructor () {
        _owner = msg.sender;
        emit OwnershipPushed( address(0), _owner );
    }

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

    modifier onlyManager() {
        require( _owner == msg.sender, "Ownable: caller is not the owner" );
        _;
    }

    function renounceManagement() public virtual override onlyManager() {
        emit OwnershipPushed( _owner, address(0) );
        _owner = address(0);
    }

    function pushManagement( address newOwner_ ) public virtual override onlyManager() {
        require( newOwner_ != address(0), "Ownable: new owner is the zero address");
        emit OwnershipPushed( _owner, newOwner_ );
        _newOwner = newOwner_;
    }
    
    function pullManagement() public virtual override {
        require( msg.sender == _newOwner, "Ownable: must be new owner to pull");
        emit OwnershipPulled( _owner, _newOwner );
        _owner = _newOwner;
    }
}

interface IERC20 {
    function decimals() external view returns (uint8);

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

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

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

    function totalSupply() external view returns (uint256);

    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 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 _callOptionalReturn(IERC20 token, bytes memory data) private {
        bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed");
        if (returndata.length > 0) { // Return data is optional
            // solhint-disable-next-line max-line-length
            require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
        }
    }
}

interface IERC20Mintable {
  function mint( uint256 amount_ ) external;

  function mint( address account_, uint256 ammount_ ) external;
}

interface IOHMERC20 {
    function burnFrom(address account_, uint256 amount_) external;
}

interface IBondCalculator {
  function valuation( address pair_, uint amount_ ) external view returns ( uint _value );
}

contract ZeroTwOhmTreasury is Ownable {

    using SafeMath for uint;
    using SafeMath for uint32;
    using SafeERC20 for IERC20;

    event Deposit( address indexed token, uint amount, uint value );
    event Withdrawal( address indexed token, uint amount, uint value );
    event CreateDebt( address indexed debtor, address indexed token, uint amount, uint value );
    event RepayDebt( address indexed debtor, address indexed token, uint amount, uint value );
    event ReservesManaged( address indexed token, uint amount );
    event ReservesUpdated( uint indexed totalReserves );
    event ReservesAudited( uint indexed totalReserves );
    event RewardsMinted( address indexed caller, address indexed recipient, uint amount );
    event ChangeQueued( MANAGING indexed managing, address queued );
    event ChangeActivated( MANAGING indexed managing, address activated, bool result );

    enum MANAGING { 
        RESERVEDEPOSITOR, 
        RESERVESPENDER, 
        RESERVETOKEN, 
        RESERVEMANAGER, 
        LIQUIDITYDEPOSITOR, 
        LIQUIDITYTOKEN, 
        LIQUIDITYMANAGER, 
        DEBTOR, 
        REWARDMANAGER, 
        SOHM 
    }

    address public immutable Z2O;
    uint32 public immutable secondsNeededForQueue;

    address[] public reserveTokens; // Push only, beware false-positives.
    mapping( address => bool ) public isReserveToken;
    mapping( address => uint32 ) public reserveTokenQueue; // Delays changes to mapping.

    address[] public reserveDepositors; // Push only, beware false-positives. Only for viewing.
    mapping( address => bool ) public isReserveDepositor;
    mapping( address => uint32 ) public reserveDepositorQueue; // Delays changes to mapping.

    address[] public reserveSpenders; // Push only, beware false-positives. Only for viewing.
    mapping( address => bool ) public isReserveSpender;
    mapping( address => uint32 ) public reserveSpenderQueue; // Delays changes to mapping.

    address[] public liquidityTokens; // Push only, beware false-positives.
    mapping( address => bool ) public isLiquidityToken;
    mapping( address => uint32 ) public LiquidityTokenQueue; // Delays changes to mapping.

    address[] public liquidityDepositors; // Push only, beware false-positives. Only for viewing.
    mapping( address => bool ) public isLiquidityDepositor;
    mapping( address => uint32 ) public LiquidityDepositorQueue; // Delays changes to mapping.

    mapping( address => address ) public bondCalculator; // bond calculator for liquidity token

    address[] public reserveManagers; // Push only, beware false-positives. Only for viewing.
    mapping( address => bool ) public isReserveManager;
    mapping( address => uint32 ) public ReserveManagerQueue; // Delays changes to mapping.

    address[] public liquidityManagers; // Push only, beware false-positives. Only for viewing.
    mapping( address => bool ) public isLiquidityManager;
    mapping( address => uint32 ) public LiquidityManagerQueue; // Delays changes to mapping.

    address[] public debtors; // Push only, beware false-positives. Only for viewing.
    mapping( address => bool ) public isDebtor;
    mapping( address => uint32 ) public debtorQueue; // Delays changes to mapping.
    mapping( address => uint ) public debtorBalance;

    address[] public rewardManagers; // Push only, beware false-positives. Only for viewing.
    mapping( address => bool ) public isRewardManager;
    mapping( address => uint32 ) public rewardManagerQueue; // Delays changes to mapping.

    address public sZ2O;
    uint public sOHMQueue; // Delays change to sOHM address
    
    uint public totalReserves; // Risk-free value of all assets
    uint public totalDebt;

    constructor (
        address _Z2O,
        address _MIM,
        uint32 _secondsNeededForQueue
    ) {
        require( _Z2O != address(0) );
        Z2O = _Z2O;

        isReserveToken[ _MIM ] = true;
        reserveTokens.push( _MIM );

        secondsNeededForQueue = _secondsNeededForQueue;
    }

    /**
        @notice allow approved address to deposit an asset for OHM
        @param _amount uint
        @param _token address
        @param _profit uint
        @return send_ uint
     */
    function deposit( uint _amount, address _token, uint _profit ) external returns ( uint send_ ) {
        require( isReserveToken[ _token ] || isLiquidityToken[ _token ], "Not accepted" );
        IERC20( _token ).safeTransferFrom( msg.sender, address(this), _amount );

        if ( isReserveToken[ _token ] ) {
            require( isReserveDepositor[ msg.sender ], "Not approved" );
        } else {
            require( isLiquidityDepositor[ msg.sender ], "Not approved" );
        }

        uint value = valueOf(_token, _amount);
        // mint OHM needed and store amount of rewards for distribution
        send_ = value.sub( _profit );
        IERC20Mintable( Z2O ).mint( msg.sender, send_ );

        totalReserves = totalReserves.add( value );
        emit ReservesUpdated( totalReserves );

        emit Deposit( _token, _amount, value );
    }

    /**
        @notice allow approved address to burn OHM for reserves
        @param _amount uint
        @param _token address
     */
    function withdraw( uint _amount, address _token ) external {
        require( isReserveToken[ _token ], "Not accepted" ); // Only reserves can be used for redemptions
        require( isReserveSpender[ msg.sender ] == true, "Not approved" );

        uint value = valueOf( _token, _amount );
        IOHMERC20( Z2O ).burnFrom( msg.sender, value );

        totalReserves = totalReserves.sub( value );
        emit ReservesUpdated( totalReserves );

        IERC20( _token ).safeTransfer( msg.sender, _amount );

        emit Withdrawal( _token, _amount, value );
    }

    /**
        @notice allow approved address to borrow reserves
        @param _amount uint
        @param _token address
     */
    function incurDebt( uint _amount, address _token ) external {
        require( isDebtor[ msg.sender ], "Not approved" );
        require( isReserveToken[ _token ], "Not accepted" );

        uint value = valueOf( _token, _amount );

        uint maximumDebt = IERC20( sZ2O ).balanceOf( msg.sender ); // Can only borrow against sOHM held
        uint availableDebt = maximumDebt.sub( debtorBalance[ msg.sender ] );
        require( value <= availableDebt, "Exceeds debt limit" );

        debtorBalance[ msg.sender ] = debtorBalance[ msg.sender ].add( value );
        totalDebt = totalDebt.add( value );

        totalReserves = totalReserves.sub( value );
        emit ReservesUpdated( totalReserves );

        IERC20( _token ).transfer( msg.sender, _amount );
        
        emit CreateDebt( msg.sender, _token, _amount, value );
    }

    /**
        @notice allow approved address to repay borrowed reserves with reserves
        @param _amount uint
        @param _token address
     */
    function repayDebtWithReserve( uint _amount, address _token ) external {
        require( isDebtor[ msg.sender ], "Not approved" );
        require( isReserveToken[ _token ], "Not accepted" );

        IERC20( _token ).safeTransferFrom( msg.sender, address(this), _amount );

        uint value = valueOf( _token, _amount );
        debtorBalance[ msg.sender ] = debtorBalance[ msg.sender ].sub( value );
        totalDebt = totalDebt.sub( value );

        totalReserves = totalReserves.add( value );
        emit ReservesUpdated( totalReserves );

        emit RepayDebt( msg.sender, _token, _amount, value );
    }

    /**
        @notice allow approved address to repay borrowed reserves with OHM
        @param _amount uint
     */
    function repayDebtWithOHM( uint _amount ) external {
        require( isDebtor[ msg.sender ], "Not approved" );

        IOHMERC20( Z2O ).burnFrom( msg.sender, _amount );

        debtorBalance[ msg.sender ] = debtorBalance[ msg.sender ].sub( _amount );
        totalDebt = totalDebt.sub( _amount );

        emit RepayDebt( msg.sender, Z2O, _amount, _amount );
    }

    /**
        @notice allow approved address to withdraw assets
        @param _token address
        @param _amount uint
     */
    function manage( address _token, uint _amount ) external {
        if( isLiquidityToken[ _token ] ) {
            require( isLiquidityManager[ msg.sender ], "Not approved" );
        } else {
            require( isReserveManager[ msg.sender ], "Not approved" );
        }

        uint value = valueOf(_token, _amount);
        require( value <= excessReserves(), "Insufficient reserves" );

        totalReserves = totalReserves.sub( value );
        emit ReservesUpdated( totalReserves );

        IERC20( _token ).safeTransfer( msg.sender, _amount );

        emit ReservesManaged( _token, _amount );
    }

    /**
        @notice send epoch reward to staking contract
     */
    function mintRewards( address _recipient, uint _amount ) external {
        require( isRewardManager[ msg.sender ], "Not approved" );
        require( _amount <= excessReserves(), "Insufficient reserves" );

        IERC20Mintable( Z2O ).mint( _recipient, _amount );

        emit RewardsMinted( msg.sender, _recipient, _amount );
    } 

    /**
        @notice returns excess reserves not backing tokens
        @return uint
     */
    function excessReserves() public view returns ( uint ) {
        return totalReserves.sub( IERC20( Z2O ).totalSupply().sub( totalDebt ) );
    }

    /**
        @notice takes inventory of all tracked assets
        @notice always consolidate to recognized reserves before audit
     */
    function auditReserves() external onlyManager() {
        uint reserves;
        for( uint i = 0; i < reserveTokens.length; i++ ) {
            reserves = reserves.add ( 
                valueOf( reserveTokens[ i ], IERC20( reserveTokens[ i ] ).balanceOf( address(this) ) )
            );
        }
        for( uint i = 0; i < liquidityTokens.length; i++ ) {
            reserves = reserves.add (
                valueOf( liquidityTokens[ i ], IERC20( liquidityTokens[ i ] ).balanceOf( address(this) ) )
            );
        }
        totalReserves = reserves;
        emit ReservesUpdated( reserves );
        emit ReservesAudited( reserves );
    }

    /**
        @notice returns OHM valuation of asset
        @param _token address
        @param _amount uint
        @return value_ uint
     */
    function valueOf( address _token, uint _amount ) public view returns ( uint value_ ) {
        if ( isReserveToken[ _token ] ) {
            // convert amount to match OHM decimals
            value_ = _amount.mul( 10 ** IERC20( Z2O ).decimals() ).div( 10 ** IERC20( _token ).decimals() );
        } else if ( isLiquidityToken[ _token ] ) {
            value_ = IBondCalculator( bondCalculator[ _token ] ).valuation( _token, _amount );
        }
    }

    /**
        @notice queue address to change boolean in mapping
        @param _managing MANAGING
        @param _address address
        @return bool
     */
    function queue( MANAGING _managing, address _address ) external onlyManager() returns ( bool ) {
        require( _address != address(0) );
        if ( _managing == MANAGING.RESERVEDEPOSITOR ) { // 0
            reserveDepositorQueue[ _address ] = uint32(block.timestamp).add32( secondsNeededForQueue );
        } else if ( _managing == MANAGING.RESERVESPENDER ) { // 1
            reserveSpenderQueue[ _address ] = uint32(block.timestamp).add32( secondsNeededForQueue );
        } else if ( _managing == MANAGING.RESERVETOKEN ) { // 2
            reserveTokenQueue[ _address ] = uint32(block.timestamp).add32( secondsNeededForQueue );
        } else if ( _managing == MANAGING.RESERVEMANAGER ) { // 3
            ReserveManagerQueue[ _address ] = uint32(block.timestamp).add32( secondsNeededForQueue.mul32( 2 ) );
        } else if ( _managing == MANAGING.LIQUIDITYDEPOSITOR ) { // 4
            LiquidityDepositorQueue[ _address ] = uint32(block.timestamp).add32( secondsNeededForQueue );
        } else if ( _managing == MANAGING.LIQUIDITYTOKEN ) { // 5
            LiquidityTokenQueue[ _address ] = uint32(block.timestamp).add32( secondsNeededForQueue );
        } else if ( _managing == MANAGING.LIQUIDITYMANAGER ) { // 6
            LiquidityManagerQueue[ _address ] = uint32(block.timestamp).add32( secondsNeededForQueue.mul32( 2 ) );
        } else if ( _managing == MANAGING.DEBTOR ) { // 7
            debtorQueue[ _address ] = uint32(block.timestamp).add32( secondsNeededForQueue );
        } else if ( _managing == MANAGING.REWARDMANAGER ) { // 8
            rewardManagerQueue[ _address ] = uint32(block.timestamp).add32( secondsNeededForQueue );
        } else if ( _managing == MANAGING.SOHM ) { // 9
            sOHMQueue = uint32(block.timestamp).add32( secondsNeededForQueue );
        } else return false;

        emit ChangeQueued( _managing, _address );
        return true;
    }

    /**
        @notice verify queue then set boolean in mapping
        @param _managing MANAGING
        @param _address address
        @param _calculator address
        @return bool
     */
    function toggle(
        MANAGING _managing, 
        address _address, 
        address _calculator 
    ) external onlyManager() returns ( bool ) {
        require( _address != address(0) );
        bool result;
        if ( _managing == MANAGING.RESERVEDEPOSITOR ) { // 0
            if ( requirements( reserveDepositorQueue, isReserveDepositor, _address ) ) {
                reserveDepositorQueue[ _address ] = 0;
                if( !listContains( reserveDepositors, _address ) ) {
                    reserveDepositors.push( _address );
                }
            }
            result = !isReserveDepositor[ _address ];
            isReserveDepositor[ _address ] = result;
            
        } else if ( _managing == MANAGING.RESERVESPENDER ) { // 1
            if ( requirements( reserveSpenderQueue, isReserveSpender, _address ) ) {
                reserveSpenderQueue[ _address ] = 0;
                if( !listContains( reserveSpenders, _address ) ) {
                    reserveSpenders.push( _address );
                }
            }
            result = !isReserveSpender[ _address ];
            isReserveSpender[ _address ] = result;

        } else if ( _managing == MANAGING.RESERVETOKEN ) { // 2
            if ( requirements( reserveTokenQueue, isReserveToken, _address ) ) {
                reserveTokenQueue[ _address ] = 0;
                if( !listContains( reserveTokens, _address ) ) {
                    reserveTokens.push( _address );
                }
            }
            result = !isReserveToken[ _address ];
            isReserveToken[ _address ] = result;

        } else if ( _managing == MANAGING.RESERVEMANAGER ) { // 3
            if ( requirements( ReserveManagerQueue, isReserveManager, _address ) ) {
                reserveManagers.push( _address );
                ReserveManagerQueue[ _address ] = 0;
                if( !listContains( reserveManagers, _address ) ) {
                    reserveManagers.push( _address );
                }
            }
            result = !isReserveManager[ _address ];
            isReserveManager[ _address ] = result;

        } else if ( _managing == MANAGING.LIQUIDITYDEPOSITOR ) { // 4
            if ( requirements( LiquidityDepositorQueue, isLiquidityDepositor, _address ) ) {
                liquidityDepositors.push( _address );
                LiquidityDepositorQueue[ _address ] = 0;
                if( !listContains( liquidityDepositors, _address ) ) {
                    liquidityDepositors.push( _address );
                }
            }
            result = !isLiquidityDepositor[ _address ];
            isLiquidityDepositor[ _address ] = result;

        } else if ( _managing == MANAGING.LIQUIDITYTOKEN ) { // 5
            if ( requirements( LiquidityTokenQueue, isLiquidityToken, _address ) ) {
                LiquidityTokenQueue[ _address ] = 0;
                if( !listContains( liquidityTokens, _address ) ) {
                    liquidityTokens.push( _address );
                }
            }
            result = !isLiquidityToken[ _address ];
            isLiquidityToken[ _address ] = result;
            bondCalculator[ _address ] = _calculator;

        } else if ( _managing == MANAGING.LIQUIDITYMANAGER ) { // 6
            if ( requirements( LiquidityManagerQueue, isLiquidityManager, _address ) ) {
                LiquidityManagerQueue[ _address ] = 0;
                if( !listContains( liquidityManagers, _address ) ) {
                    liquidityManagers.push( _address );
                }
            }
            result = !isLiquidityManager[ _address ];
            isLiquidityManager[ _address ] = result;

        } else if ( _managing == MANAGING.DEBTOR ) { // 7
            if ( requirements( debtorQueue, isDebtor, _address ) ) {
                debtorQueue[ _address ] = 0;
                if( !listContains( debtors, _address ) ) {
                    debtors.push( _address );
                }
            }
            result = !isDebtor[ _address ];
            isDebtor[ _address ] = result;

        } else if ( _managing == MANAGING.REWARDMANAGER ) { // 8
            if ( requirements( rewardManagerQueue, isRewardManager, _address ) ) {
                rewardManagerQueue[ _address ] = 0;
                if( !listContains( rewardManagers, _address ) ) {
                    rewardManagers.push( _address );
                }
            }
            result = !isRewardManager[ _address ];
            isRewardManager[ _address ] = result;

        } else if ( _managing == MANAGING.SOHM ) { // 9
            sOHMQueue = 0;
            sZ2O = _address;
            result = true;

        } else return false;

        emit ChangeActivated( _managing, _address, result );
        return true;
    }

    /**
        @notice checks requirements and returns altered structs
        @param queue_ mapping( address => uint )
        @param status_ mapping( address => bool )
        @param _address address
        @return bool 
     */
    function requirements( 
        mapping( address => uint32 ) storage queue_, 
        mapping( address => bool ) storage status_, 
        address _address 
    ) internal view returns ( bool ) {
        if ( !status_[ _address ] ) {
            require( queue_[ _address ] != 0, "Must queue" );
            require( queue_[ _address ] <= uint32(block.timestamp), "Queue not expired" );
            return true;
        } return false;
    }

    /**
        @notice checks array to ensure against duplicate
        @param _list address[]
        @param _token address
        @return bool
     */
    function listContains( address[] storage _list, address _token ) internal view returns ( bool ) {
        for( uint i = 0; i < _list.length; i++ ) {
            if( _list[ i ] == _token ) {
                return true;
            }
        }
        return false;
    }
}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 100
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "abi"
      ]
    }
  },
  "libraries": {}
}

Contract ABI

[{"inputs":[{"internalType":"address","name":"_Z2O","type":"address"},{"internalType":"address","name":"_MIM","type":"address"},{"internalType":"uint32","name":"_secondsNeededForQueue","type":"uint32"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"enum ZeroTwOhmTreasury.MANAGING","name":"managing","type":"uint8"},{"indexed":false,"internalType":"address","name":"activated","type":"address"},{"indexed":false,"internalType":"bool","name":"result","type":"bool"}],"name":"ChangeActivated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"enum ZeroTwOhmTreasury.MANAGING","name":"managing","type":"uint8"},{"indexed":false,"internalType":"address","name":"queued","type":"address"}],"name":"ChangeQueued","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"debtor","type":"address"},{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"CreateDebt","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipPulled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipPushed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"debtor","type":"address"},{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"RepayDebt","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"totalReserves","type":"uint256"}],"name":"ReservesAudited","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ReservesManaged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"totalReserves","type":"uint256"}],"name":"ReservesUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"RewardsMinted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Withdrawal","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"LiquidityDepositorQueue","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"LiquidityManagerQueue","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"LiquidityTokenQueue","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"ReserveManagerQueue","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Z2O","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"auditReserves","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"bondCalculator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"debtorBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"debtorQueue","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"debtors","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_profit","type":"uint256"}],"name":"deposit","outputs":[{"internalType":"uint256","name":"send_","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"excessReserves","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_token","type":"address"}],"name":"incurDebt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isDebtor","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isLiquidityDepositor","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isLiquidityManager","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isLiquidityToken","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isReserveDepositor","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isReserveManager","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isReserveSpender","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isReserveToken","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isRewardManager","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"liquidityDepositors","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"liquidityManagers","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"liquidityTokens","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"manage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manager","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mintRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pullManagement","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner_","type":"address"}],"name":"pushManagement","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"enum ZeroTwOhmTreasury.MANAGING","name":"_managing","type":"uint8"},{"internalType":"address","name":"_address","type":"address"}],"name":"queue","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceManagement","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"repayDebtWithOHM","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_token","type":"address"}],"name":"repayDebtWithReserve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"reserveDepositorQueue","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"reserveDepositors","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"reserveManagers","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"reserveSpenderQueue","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"reserveSpenders","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"reserveTokenQueue","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"reserveTokens","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"rewardManagerQueue","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"rewardManagers","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sOHMQueue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sZ2O","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"secondsNeededForQueue","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"enum ZeroTwOhmTreasury.MANAGING","name":"_managing","type":"uint8"},{"internalType":"address","name":"_address","type":"address"},{"internalType":"address","name":"_calculator","type":"address"}],"name":"toggle","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalDebt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalReserves","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"valueOf","outputs":[{"internalType":"uint256","name":"value_","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_token","type":"address"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60c060405234801561001057600080fd5b50604051620038aa380380620038aa8339818101604052606081101561003557600080fd5b5080516020820151604092830151600080546001600160a01b031916331780825594519394929391926001600160a01b0316917fea8258f2d9ddb679928cf34b78cf645b7feda9acc828e4dd82d014eaae270eba908290a36001600160a01b0383166100a057600080fd5b6001600160601b0319606084901b166080526001600160a01b039182166000818152600360205260408120805460ff1916600190811790915560028054918201815582527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0180546001600160a01b0319169092179091556001600160e01b031960e083901b1660a052919092169163ffffffff169061370190620001a9903980611a27528061200652806120835280612100528061217c528061220e528061228b5280612307528061238952806124065280612483525080610a1e5280610dc05280610ed15280610f855280611386528061191c5280611c9a528061253c52506137016000f3fe608060405234801561001057600080fd5b50600436106102c05760003560e01c806387d67dff1161017d578063d031370b116100d9578063ee4e19a111610092578063ee4e19a114610884578063f1696d2e146108aa578063fb939588146108b2578063fbfd393b146108d8578063fc7b9c181461090f578063fd1ec01014610917578063fff9ee8714610934576102c0565b8063d031370b146107b8578063d796ffb8146107d5578063df89b34414610801578063e54194b814610827578063e83afee31461082f578063ebd83cd81461085e576102c0565b8063a569e57111610136578063a569e571146106ab578063ab319c9a146106d1578063b1bd38b0146106f7578063b5b1d5601461071d578063bc157ac11461073a578063c24ad43e1461076c578063cd85641a14610792576102c0565b806387d67dff146105ee5780638f59c727146106145780638f6a7b571461063a5780638f840ddd14610657578063932cc8c31461065f578063a1210a2d14610685576102c0565b80632b7ce5001161022c57806368c31dd5116101e557806368c31dd5146104fe5780636a20de92146105245780636b5e40a71461055057806370a0502a1461056d578063788c6c011461058a5780637a8960d8146105c9578063869871bf146105d1576102c0565b80632b7ce5001461047d578063437f79121461048557806346f68ee9146104a2578063481c6a75146104c85780634e83423c146104d05780635a96ac0a146104f6576102c0565b80630f70431f1161027e5780630f70431f146103a0578063124154ca146103bd57806312422d23146103f75780631af4da70146104235780631eec5a9a146104495780632789de3714610475576102c0565b8062f714ce146102c55780630619aff1146102f3578063089208d81461032c578063094a8651146103345780630b0eee301461036c5780630c3513a814610398575b600080fd5b6102f1600480360360408110156102db57600080fd5b50803590602001356001600160a01b031661095a565b005b6103106004803603602081101561030957600080fd5b5035610b31565b604080516001600160a01b039092168252519081900360200190f35b6102f1610b5b565b61035a6004803603602081101561034a57600080fd5b50356001600160a01b0316610bf2565b60408051918252519081900360200190f35b6102f16004803603604081101561038257600080fd5b506001600160a01b038135169060200135610c04565b61035a610db3565b6102f1600480360360208110156103b657600080fd5b5035610e57565b6103e3600480360360208110156103d357600080fd5b50356001600160a01b0316610fd6565b604080519115158252519081900360200190f35b6102f16004803603604081101561040d57600080fd5b50803590602001356001600160a01b0316610feb565b6103106004803603602081101561043957600080fd5b50356001600160a01b03166112bb565b61035a6004803603604081101561045f57600080fd5b506001600160a01b0381351690602001356112d6565b61035a6114ca565b6102f16114d0565b6103106004803603602081101561049b57600080fd5b5035611693565b6102f1600480360360208110156104b857600080fd5b50356001600160a01b03166116a3565b610310611790565b6103e3600480360360208110156104e657600080fd5b50356001600160a01b031661179f565b6102f16117b4565b6103e36004803603602081101561051457600080fd5b50356001600160a01b031661185e565b6102f16004803603604081101561053a57600080fd5b506001600160a01b038135169060200135611873565b6103106004803603602081101561056657600080fd5b50356119ed565b6103106004803603602081101561058357600080fd5b50356119fd565b6105b0600480360360208110156105a057600080fd5b50356001600160a01b0316611a0d565b6040805163ffffffff9092168252519081900360200190f35b6105b0611a25565b610310600480360360208110156105e757600080fd5b5035611a49565b6103e36004803603602081101561060457600080fd5b50356001600160a01b0316611a59565b6105b06004803603602081101561062a57600080fd5b50356001600160a01b0316611a6e565b6103106004803603602081101561065057600080fd5b5035611a86565b61035a611a96565b6105b06004803603602081101561067557600080fd5b50356001600160a01b0316611a9c565b6103e36004803603602081101561069b57600080fd5b50356001600160a01b0316611ab4565b6103e3600480360360208110156106c157600080fd5b50356001600160a01b0316611ac9565b6105b0600480360360208110156106e757600080fd5b50356001600160a01b0316611ade565b6105b06004803603602081101561070d57600080fd5b50356001600160a01b0316611af6565b6103106004803603602081101561073357600080fd5b5035611b0e565b61035a6004803603606081101561075057600080fd5b508035906001600160a01b036020820135169060400135611b1e565b6105b06004803603602081101561078257600080fd5b50356001600160a01b0316611d9c565b6105b0600480360360208110156107a857600080fd5b50356001600160a01b0316611db4565b610310600480360360208110156107ce57600080fd5b5035611dcc565b6102f1600480360360408110156107eb57600080fd5b50803590602001356001600160a01b0316611ddc565b6103e36004803603602081101561081757600080fd5b50356001600160a01b0316611f5f565b610310611f74565b6103e36004803603604081101561084557600080fd5b50803560ff1690602001356001600160a01b0316611f83565b6103e36004803603602081101561087457600080fd5b50356001600160a01b0316612510565b6103e36004803603602081101561089a57600080fd5b50356001600160a01b0316612525565b61031061253a565b6105b0600480360360208110156108c857600080fd5b50356001600160a01b031661255e565b6103e3600480360360608110156108ee57600080fd5b5060ff813516906001600160a01b0360208201358116916040013516612576565b61035a612e8c565b6103106004803603602081101561092d57600080fd5b5035612e92565b6105b06004803603602081101561094a57600080fd5b50356001600160a01b0316612ea2565b6001600160a01b03811660009081526003602052604090205460ff166109b6576040805162461bcd60e51b815260206004820152600c60248201526b139bdd081858d8d95c1d195960a21b604482015290519081900360640190fd5b3360009081526009602052604090205460ff161515600114610a0e576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b6000610a1a82846112d6565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166379cc679033836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015610a9357600080fd5b505af1158015610aa7573d6000803e3d6000fd5b5050602154610ab99250905082612eba565b602181905560405160008051602061368283398151915290600090a2610ae96001600160a01b0383163385612efc565b604080518481526020810183905281516001600160a01b038516927fdf273cb619d95419a9cd0ec88123a0538c85064229baa6363788f743fff90deb928290030190a2505050565b60128181548110610b4157600080fd5b6000918252602090912001546001600160a01b0316905081565b6000546001600160a01b03163314610ba8576040805162461bcd60e51b81526020600482018190526024820152600080516020613662833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907fea8258f2d9ddb679928cf34b78cf645b7feda9acc828e4dd82d014eaae270eba908390a3600080546001600160a01b0319169055565b601b6020526000908152604090205481565b6001600160a01b0382166000908152600c602052604090205460ff1615610c7d573360009081526016602052604090205460ff16610c78576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b610cd0565b3360009081526013602052604090205460ff16610cd0576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b6000610cdc83836112d6565b9050610ce6610db3565b811115610d32576040805162461bcd60e51b8152602060048201526015602482015274496e73756666696369656e7420726573657276657360581b604482015290519081900360640190fd5b602154610d3f9082612eba565b602181905560405160008051602061368283398151915290600090a2610d6f6001600160a01b0384163384612efc565b6040805183815290516001600160a01b038516917f2bb2640731848fe9820ba48dbc978c1fc9bbd5f11b948bfab05b7dee3378fd80919081900360200190a2505050565b6000610e52610e496022547f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015610e1757600080fd5b505afa158015610e2b573d6000803e3d6000fd5b505050506040513d6020811015610e4157600080fd5b505190612eba565b60215490612eba565b905090565b3360009081526019602052604090205460ff16610eaa576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b6040805163079cc67960e41b81523360048201526024810183905290516001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916379cc679091604480830192600092919082900301818387803b158015610f1857600080fd5b505af1158015610f2c573d6000803e3d6000fd5b5050336000908152601b6020526040902054610f4b9250905082612eba565b336000908152601b6020526040902055602254610f689082612eba565b602255604080518281526020810183905281516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169233927fc6d98eecfc9c78ab62c89a82950079b54874749f1f6f24090f7acc758bc2f309929081900390910190a350565b60066020526000908152604090205460ff1681565b3360009081526019602052604090205460ff1661103e576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b6001600160a01b03811660009081526003602052604090205460ff1661109a576040805162461bcd60e51b815260206004820152600c60248201526b139bdd081858d8d95c1d195960a21b604482015290519081900360640190fd5b60006110a682846112d6565b601f54604080516370a0823160e01b815233600482015290519293506000926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b1580156110f757600080fd5b505afa15801561110b573d6000803e3d6000fd5b505050506040513d602081101561112157600080fd5b5051336000908152601b602052604081205491925090611142908390612eba565b90508083111561118e576040805162461bcd60e51b8152602060048201526012602482015271115e18d959591cc81919589d081b1a5b5a5d60721b604482015290519081900360640190fd5b336000908152601b60205260409020546111a89084612f53565b336000908152601b60205260409020556022546111c59084612f53565b6022556021546111d59084612eba565b602181905560405160008051602061368283398151915290600090a26040805163a9059cbb60e01b81523360048201526024810187905290516001600160a01b0386169163a9059cbb9160448083019260209291908290030181600087803b15801561124057600080fd5b505af1158015611254573d6000803e3d6000fd5b505050506040513d602081101561126a57600080fd5b5050604080518681526020810185905281516001600160a01b0387169233927f7e1a939bed137a819b5d2979822c67f877689f7a863d5e4cb57cdca97b2977d6929081900390910190a35050505050565b6011602052600090815260409020546001600160a01b031681565b6001600160a01b03821660009081526003602052604081205460ff16156114135761140c836001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561133357600080fd5b505afa158015611347573d6000803e3d6000fd5b505050506040513d602081101561135d57600080fd5b50516040805163313ce56760e01b8152905160ff909216600a0a91611406916001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163313ce56791600480820192602092909190829003018186803b1580156113cd57600080fd5b505afa1580156113e1573d6000803e3d6000fd5b505050506040513d60208110156113f757600080fd5b5051859060ff16600a0a612fab565b90613004565b90506114c4565b6001600160a01b0383166000908152600c602052604090205460ff16156114c4576001600160a01b03808416600081815260116020908152604091829020548251634249719f60e01b815260048101949094526024840187905291519190931692634249719f9260448082019391829003018186803b15801561149557600080fd5b505afa1580156114a9573d6000803e3d6000fd5b505050506040513d60208110156114bf57600080fd5b505190505b92915050565b60205481565b6000546001600160a01b0316331461151d576040805162461bcd60e51b81526020600482018190526024820152600080516020613662833981519152604482015290519081900360640190fd5b6000805b6002548110156115f5576115eb6115e46002838154811061153e57fe5b600091825260209091200154600280546001600160a01b03909216918590811061156457fe5b60009182526020918290200154604080516370a0823160e01b815230600482015290516001600160a01b03909216926370a0823192602480840193829003018186803b1580156115b357600080fd5b505afa1580156115c7573d6000803e3d6000fd5b505050506040513d60208110156115dd57600080fd5b50516112d6565b8390612f53565b9150600101611521565b5060005b600b548110156116465761163c6115e4600b838154811061161657fe5b600091825260209091200154600b80546001600160a01b03909216918590811061156457fe5b91506001016115f9565b506021819055604051819060008051602061368283398151915290600090a260405181907fec691f09f6924b27932253f85caf99bacc30360cc0e50a1cc4d2acc24601446690600090a250565b60088181548110610b4157600080fd5b6000546001600160a01b031633146116f0576040805162461bcd60e51b81526020600482018190526024820152600080516020613662833981519152604482015290519081900360640190fd5b6001600160a01b0381166117355760405162461bcd60e51b81526004018080602001828103825260268152602001806135f96026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917fea8258f2d9ddb679928cf34b78cf645b7feda9acc828e4dd82d014eaae270eba91a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031690565b601d6020526000908152604090205460ff1681565b6001546001600160a01b031633146117fd5760405162461bcd60e51b815260040180806020018281038252602281526020018061361f6022913960400191505060405180910390fd5b600154600080546040516001600160a01b0393841693909116917faa151555690c956fc3ea32f106bb9f119b5237a061eaa8557cff3e51e3792c8d91a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b60036020526000908152604090205460ff1681565b336000908152601d602052604090205460ff166118c6576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b6118ce610db3565b81111561191a576040805162461bcd60e51b8152602060048201526015602482015274496e73756666696369656e7420726573657276657360581b604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166340c10f1983836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b15801561199157600080fd5b505af11580156119a5573d6000803e3d6000fd5b50506040805184815290516001600160a01b03861693503392507ffa8ccab40e7da8146c2304cd0950334fd30a6ba093abe86261aa13911fed849c9181900360200190a35050565b60058181548110610b4157600080fd5b60158181548110610b4157600080fd5b60046020526000908152604090205463ffffffff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b60188181548110610b4157600080fd5b60096020526000908152604090205460ff1681565b600d6020526000908152604090205463ffffffff1681565b600e8181548110610b4157600080fd5b60215481565b60076020526000908152604090205463ffffffff1681565b600f6020526000908152604090205460ff1681565b600c6020526000908152604090205460ff1681565b60176020526000908152604090205463ffffffff1681565b60146020526000908152604090205463ffffffff1681565b601c8181548110610b4157600080fd5b6001600160a01b03821660009081526003602052604081205460ff1680611b5d57506001600160a01b0383166000908152600c602052604090205460ff165b611b9d576040805162461bcd60e51b815260206004820152600c60248201526b139bdd081858d8d95c1d195960a21b604482015290519081900360640190fd5b611bb26001600160a01b038416333087613046565b6001600160a01b03831660009081526003602052604090205460ff1615611c2b573360009081526006602052604090205460ff16611c26576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b611c7e565b336000908152600f602052604090205460ff16611c7e576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b6000611c8a84866112d6565b9050611c968184612eba565b91507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166340c10f1933846040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015611d0f57600080fd5b505af1158015611d23573d6000803e3d6000fd5b5050602154611d359250905082612f53565b602181905560405160008051602061368283398151915290600090a2604080518681526020810183905281516001600160a01b038716927f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a15928290030190a2509392505050565b600a6020526000908152604090205463ffffffff1681565b601a6020526000908152604090205463ffffffff1681565b60028181548110610b4157600080fd5b3360009081526019602052604090205460ff16611e2f576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b6001600160a01b03811660009081526003602052604090205460ff16611e8b576040805162461bcd60e51b815260206004820152600c60248201526b139bdd081858d8d95c1d195960a21b604482015290519081900360640190fd5b611ea06001600160a01b038216333085613046565b6000611eac82846112d6565b336000908152601b6020526040902054909150611ec99082612eba565b336000908152601b6020526040902055602254611ee69082612eba565b602255602154611ef69082612f53565b602181905560405160008051602061368283398151915290600090a2604080518481526020810183905281516001600160a01b0385169233927fc6d98eecfc9c78ab62c89a82950079b54874749f1f6f24090f7acc758bc2f309929081900390910190a3505050565b60166020526000908152604090205460ff1681565b601f546001600160a01b031681565b600080546001600160a01b03163314611fd1576040805162461bcd60e51b81526020600482018190526024820152600080516020613662833981519152604482015290519081900360640190fd5b6001600160a01b038216611fe457600080fd5b6000836009811115611ff257fe5b14156120615761202c63ffffffff428116907f0000000000000000000000000000000000000000000000000000000000000000906130a616565b6001600160a01b0383166000908152600760205260409020805463ffffffff191663ffffffff929092169190911790556124bf565b600183600981111561206f57fe5b14156120de576120a963ffffffff428116907f0000000000000000000000000000000000000000000000000000000000000000906130a616565b6001600160a01b0383166000908152600a60205260409020805463ffffffff191663ffffffff929092169190911790556124bf565b60028360098111156120ec57fe5b141561215b5761212663ffffffff428116907f0000000000000000000000000000000000000000000000000000000000000000906130a616565b6001600160a01b0383166000908152600460205260409020805463ffffffff191663ffffffff929092169190911790556124bf565b600383600981111561216957fe5b14156121ec576121b76121a763ffffffff7f000000000000000000000000000000000000000000000000000000000000000081169060029061310716565b63ffffffff42811691906130a616565b6001600160a01b0383166000908152601460205260409020805463ffffffff191663ffffffff929092169190911790556124bf565b60048360098111156121fa57fe5b14156122695761223463ffffffff428116907f0000000000000000000000000000000000000000000000000000000000000000906130a616565b6001600160a01b0383166000908152601060205260409020805463ffffffff191663ffffffff929092169190911790556124bf565b600583600981111561227757fe5b14156122e6576122b163ffffffff428116907f0000000000000000000000000000000000000000000000000000000000000000906130a616565b6001600160a01b0383166000908152600d60205260409020805463ffffffff191663ffffffff929092169190911790556124bf565b60068360098111156122f457fe5b1415612367576123326121a763ffffffff7f000000000000000000000000000000000000000000000000000000000000000081169060029061310716565b6001600160a01b0383166000908152601760205260409020805463ffffffff191663ffffffff929092169190911790556124bf565b600783600981111561237557fe5b14156123e4576123af63ffffffff428116907f0000000000000000000000000000000000000000000000000000000000000000906130a616565b6001600160a01b0383166000908152601a60205260409020805463ffffffff191663ffffffff929092169190911790556124bf565b60088360098111156123f257fe5b14156124615761242c63ffffffff428116907f0000000000000000000000000000000000000000000000000000000000000000906130a616565b6001600160a01b0383166000908152601e60205260409020805463ffffffff191663ffffffff929092169190911790556124bf565b600983600981111561246f57fe5b14156124b7576124a963ffffffff428116907f0000000000000000000000000000000000000000000000000000000000000000906130a616565b63ffffffff166020556124bf565b5060006114c4565b8260098111156124cb57fe5b604080516001600160a01b038516815290517f0e4f2c4b5bc209d509bc3d49348c787fefadc66a79351b470599ac0f5be52eaf9181900360200190a250600192915050565b60136020526000908152604090205460ff1681565b60196020526000908152604090205460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b601e6020526000908152604090205463ffffffff1681565b600080546001600160a01b031633146125c4576040805162461bcd60e51b81526020600482018190526024820152600080516020613662833981519152604482015290519081900360640190fd5b6001600160a01b0383166125d757600080fd5b6000808560098111156125e657fe5b14156126ac576125f96007600686613178565b1561267c576001600160a01b0384166000908152600760205260409020805463ffffffff1916905561262c600585613271565b61267c57600580546001810182556000919091527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db00180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152600660205260409020805460ff81161560ff199091168117909155612e2e565b60018560098111156126ba57fe5b1415612780576126cd600a600986613178565b15612750576001600160a01b0384166000908152600a60205260409020805463ffffffff19169055612700600885613271565b61275057600880546001810182556000919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152600960205260409020805460ff81161560ff199091168117909155612e2e565b600285600981111561278e57fe5b1415612854576127a16004600386613178565b15612824576001600160a01b0384166000908152600460205260409020805463ffffffff191690556127d4600285613271565b61282457600280546001810182556000919091527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152600360205260409020805460ff81161560ff199091168117909155612e2e565b600385600981111561286257fe5b1415612965576128756014601386613178565b1561293557601280546001810182557fbb8a6a4669ba250d26cd7a459eca9d215f8307e33aebe50379bc5a3617ec34440180546001600160a01b0319166001600160a01b0387169081179091556000908152601460205260409020805463ffffffff191690556128e59085613271565b61293557601280546001810182556000919091527fbb8a6a4669ba250d26cd7a459eca9d215f8307e33aebe50379bc5a3617ec34440180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152601360205260409020805460ff81161560ff199091168117909155612e2e565b600485600981111561297357fe5b1415612a76576129866010600f86613178565b15612a4657600e80546001810182557fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fd0180546001600160a01b0319166001600160a01b0387169081179091556000908152601060205260409020805463ffffffff191690556129f69085613271565b612a4657600e80546001810182556000919091527fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fd0180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152600f60205260409020805460ff81161560ff199091168117909155612e2e565b6005856009811115612a8457fe5b1415612b6c57612a97600d600c86613178565b15612b1a576001600160a01b0384166000908152600d60205260409020805463ffffffff19169055612aca600b85613271565b612b1a57600b80546001810182556000919091527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b038381166000908152600c60209081526040808320805460ff81161560ff199091168117909155601190925290912080546001600160a01b03191692851692909217909155612e2e565b6006856009811115612b7a57fe5b1415612c4057612b8d6017601686613178565b15612c10576001600160a01b0384166000908152601760205260409020805463ffffffff19169055612bc0601585613271565b612c1057601580546001810182556000919091527f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec4750180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152601660205260409020805460ff81161560ff199091168117909155612e2e565b6007856009811115612c4e57fe5b1415612d1457612c61601a601986613178565b15612ce4576001600160a01b0384166000908152601a60205260409020805463ffffffff19169055612c94601885613271565b612ce457601880546001810182556000919091527fb13d2d76d1f4b7be834882e410b3e3a8afaf69f83600ae24db354391d2378d2e0180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152601960205260409020805460ff81161560ff199091168117909155612e2e565b6008856009811115612d2257fe5b1415612de857612d35601e601d86613178565b15612db8576001600160a01b0384166000908152601e60205260409020805463ffffffff19169055612d68601c85613271565b612db857601c80546001810182556000919091527f0e4562a10381dec21b205ed72637e6b1b523bdd0e4d4d50af5cd23dd4500a2110180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152601d60205260409020805460ff81161560ff199091168117909155612e2e565b6009856009811115612df657fe5b1415612e2457506000602055601f80546001600160a01b0319166001600160a01b0385161790556001612e2e565b6000915050612e85565b846009811115612e3a57fe5b604080516001600160a01b0387168152831515602082015281517f0dcacb7e392f3d6a216ed2660e3dcfd40b7793d33591db2ba185a6b8e44fc477929181900390910190a260019150505b9392505050565b60225481565b600b8181548110610b4157600080fd5b60106020526000908152604090205463ffffffff1681565b6000612e8583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506132c1565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052612f4e908490613358565b505050565b600082820183811015612e85576040805162461bcd60e51b815260206004820152601b60248201527a536166654d6174683a206164646974696f6e206f766572666c6f7760281b604482015290519081900360640190fd5b600082612fba575060006114c4565b82820282848281612fc757fe5b0414612e855760405162461bcd60e51b81526004018080602001828103825260218152602001806136416021913960400191505060405180910390fd5b6000612e8583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613409565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b1790526130a0908590613358565b50505050565b600082820163ffffffff8085169082161015612e85576040805162461bcd60e51b815260206004820152601b60248201527a536166654d6174683a206164646974696f6e206f766572666c6f7760281b604482015290519081900360640190fd5b600063ffffffff831661311c575060006114c4565b82820263ffffffff808416908086169083168161313557fe5b0463ffffffff1614612e855760405162461bcd60e51b81526004018080602001828103825260218152602001806136416021913960400191505060405180910390fd5b6001600160a01b03811660009081526020839052604081205460ff16613267576001600160a01b03821660009081526020859052604090205463ffffffff166131f5576040805162461bcd60e51b815260206004820152600a6024820152694d75737420717565756560b01b604482015290519081900360640190fd5b6001600160a01b03821660009081526020859052604090205463ffffffff4281169116111561325f576040805162461bcd60e51b8152602060048201526011602482015270145d595d59481b9bdd08195e1c1a5c9959607a1b604482015290519081900360640190fd5b506001612e85565b5060009392505050565b6000805b835481101561326757826001600160a01b031684828154811061329457fe5b6000918252602090912001546001600160a01b031614156132b95760019150506114c4565b600101613275565b600081848411156133505760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156133155781810151838201526020016132fd565b50505050905090810190601f1680156133425780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60606133ad826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661346e9092919063ffffffff16565b805190915015612f4e578080602001905160208110156133cc57600080fd5b5051612f4e5760405162461bcd60e51b815260040180806020018281038252602a8152602001806136a2602a913960400191505060405180910390fd5b600081836134585760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156133155781810151838201526020016132fd565b50600083858161346457fe5b0495945050505050565b606061347d8484600085613485565b949350505050565b6060613490856135f2565b6134e1576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b602083106135205780518252601f199092019160209182019101613501565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114613582576040519150601f19603f3d011682016040523d82523d6000602084013e613587565b606091505b5091509150811561359b57915061347d9050565b8051156135ab5780518082602001fd5b60405162461bcd60e51b81526020600482018181528651602484015286518793919283926044019190850190808383600083156133155781810151838201526020016132fd565b3b15159056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734f776e61626c653a206d757374206265206e6577206f776e657220746f2070756c6c536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657293bb8edd35984706eee1b92541281f7f62d33c01c5b2ec0929a113603bd21d665361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a26469706673582212200f5ff9f6ce53c47bb1bfc404e13a4a7753cf53730888048a1d6d6d8356fcdd8964736f6c63430007050033000000000000000000000000db96f8efd6865644993505318cc08ff9c42fb9ac000000000000000000000000fea7a6a0b346362bf88a9e4a88416b77a57d6c2a0000000000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106102c05760003560e01c806387d67dff1161017d578063d031370b116100d9578063ee4e19a111610092578063ee4e19a114610884578063f1696d2e146108aa578063fb939588146108b2578063fbfd393b146108d8578063fc7b9c181461090f578063fd1ec01014610917578063fff9ee8714610934576102c0565b8063d031370b146107b8578063d796ffb8146107d5578063df89b34414610801578063e54194b814610827578063e83afee31461082f578063ebd83cd81461085e576102c0565b8063a569e57111610136578063a569e571146106ab578063ab319c9a146106d1578063b1bd38b0146106f7578063b5b1d5601461071d578063bc157ac11461073a578063c24ad43e1461076c578063cd85641a14610792576102c0565b806387d67dff146105ee5780638f59c727146106145780638f6a7b571461063a5780638f840ddd14610657578063932cc8c31461065f578063a1210a2d14610685576102c0565b80632b7ce5001161022c57806368c31dd5116101e557806368c31dd5146104fe5780636a20de92146105245780636b5e40a71461055057806370a0502a1461056d578063788c6c011461058a5780637a8960d8146105c9578063869871bf146105d1576102c0565b80632b7ce5001461047d578063437f79121461048557806346f68ee9146104a2578063481c6a75146104c85780634e83423c146104d05780635a96ac0a146104f6576102c0565b80630f70431f1161027e5780630f70431f146103a0578063124154ca146103bd57806312422d23146103f75780631af4da70146104235780631eec5a9a146104495780632789de3714610475576102c0565b8062f714ce146102c55780630619aff1146102f3578063089208d81461032c578063094a8651146103345780630b0eee301461036c5780630c3513a814610398575b600080fd5b6102f1600480360360408110156102db57600080fd5b50803590602001356001600160a01b031661095a565b005b6103106004803603602081101561030957600080fd5b5035610b31565b604080516001600160a01b039092168252519081900360200190f35b6102f1610b5b565b61035a6004803603602081101561034a57600080fd5b50356001600160a01b0316610bf2565b60408051918252519081900360200190f35b6102f16004803603604081101561038257600080fd5b506001600160a01b038135169060200135610c04565b61035a610db3565b6102f1600480360360208110156103b657600080fd5b5035610e57565b6103e3600480360360208110156103d357600080fd5b50356001600160a01b0316610fd6565b604080519115158252519081900360200190f35b6102f16004803603604081101561040d57600080fd5b50803590602001356001600160a01b0316610feb565b6103106004803603602081101561043957600080fd5b50356001600160a01b03166112bb565b61035a6004803603604081101561045f57600080fd5b506001600160a01b0381351690602001356112d6565b61035a6114ca565b6102f16114d0565b6103106004803603602081101561049b57600080fd5b5035611693565b6102f1600480360360208110156104b857600080fd5b50356001600160a01b03166116a3565b610310611790565b6103e3600480360360208110156104e657600080fd5b50356001600160a01b031661179f565b6102f16117b4565b6103e36004803603602081101561051457600080fd5b50356001600160a01b031661185e565b6102f16004803603604081101561053a57600080fd5b506001600160a01b038135169060200135611873565b6103106004803603602081101561056657600080fd5b50356119ed565b6103106004803603602081101561058357600080fd5b50356119fd565b6105b0600480360360208110156105a057600080fd5b50356001600160a01b0316611a0d565b6040805163ffffffff9092168252519081900360200190f35b6105b0611a25565b610310600480360360208110156105e757600080fd5b5035611a49565b6103e36004803603602081101561060457600080fd5b50356001600160a01b0316611a59565b6105b06004803603602081101561062a57600080fd5b50356001600160a01b0316611a6e565b6103106004803603602081101561065057600080fd5b5035611a86565b61035a611a96565b6105b06004803603602081101561067557600080fd5b50356001600160a01b0316611a9c565b6103e36004803603602081101561069b57600080fd5b50356001600160a01b0316611ab4565b6103e3600480360360208110156106c157600080fd5b50356001600160a01b0316611ac9565b6105b0600480360360208110156106e757600080fd5b50356001600160a01b0316611ade565b6105b06004803603602081101561070d57600080fd5b50356001600160a01b0316611af6565b6103106004803603602081101561073357600080fd5b5035611b0e565b61035a6004803603606081101561075057600080fd5b508035906001600160a01b036020820135169060400135611b1e565b6105b06004803603602081101561078257600080fd5b50356001600160a01b0316611d9c565b6105b0600480360360208110156107a857600080fd5b50356001600160a01b0316611db4565b610310600480360360208110156107ce57600080fd5b5035611dcc565b6102f1600480360360408110156107eb57600080fd5b50803590602001356001600160a01b0316611ddc565b6103e36004803603602081101561081757600080fd5b50356001600160a01b0316611f5f565b610310611f74565b6103e36004803603604081101561084557600080fd5b50803560ff1690602001356001600160a01b0316611f83565b6103e36004803603602081101561087457600080fd5b50356001600160a01b0316612510565b6103e36004803603602081101561089a57600080fd5b50356001600160a01b0316612525565b61031061253a565b6105b0600480360360208110156108c857600080fd5b50356001600160a01b031661255e565b6103e3600480360360608110156108ee57600080fd5b5060ff813516906001600160a01b0360208201358116916040013516612576565b61035a612e8c565b6103106004803603602081101561092d57600080fd5b5035612e92565b6105b06004803603602081101561094a57600080fd5b50356001600160a01b0316612ea2565b6001600160a01b03811660009081526003602052604090205460ff166109b6576040805162461bcd60e51b815260206004820152600c60248201526b139bdd081858d8d95c1d195960a21b604482015290519081900360640190fd5b3360009081526009602052604090205460ff161515600114610a0e576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b6000610a1a82846112d6565b90507f000000000000000000000000db96f8efd6865644993505318cc08ff9c42fb9ac6001600160a01b03166379cc679033836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015610a9357600080fd5b505af1158015610aa7573d6000803e3d6000fd5b5050602154610ab99250905082612eba565b602181905560405160008051602061368283398151915290600090a2610ae96001600160a01b0383163385612efc565b604080518481526020810183905281516001600160a01b038516927fdf273cb619d95419a9cd0ec88123a0538c85064229baa6363788f743fff90deb928290030190a2505050565b60128181548110610b4157600080fd5b6000918252602090912001546001600160a01b0316905081565b6000546001600160a01b03163314610ba8576040805162461bcd60e51b81526020600482018190526024820152600080516020613662833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907fea8258f2d9ddb679928cf34b78cf645b7feda9acc828e4dd82d014eaae270eba908390a3600080546001600160a01b0319169055565b601b6020526000908152604090205481565b6001600160a01b0382166000908152600c602052604090205460ff1615610c7d573360009081526016602052604090205460ff16610c78576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b610cd0565b3360009081526013602052604090205460ff16610cd0576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b6000610cdc83836112d6565b9050610ce6610db3565b811115610d32576040805162461bcd60e51b8152602060048201526015602482015274496e73756666696369656e7420726573657276657360581b604482015290519081900360640190fd5b602154610d3f9082612eba565b602181905560405160008051602061368283398151915290600090a2610d6f6001600160a01b0384163384612efc565b6040805183815290516001600160a01b038516917f2bb2640731848fe9820ba48dbc978c1fc9bbd5f11b948bfab05b7dee3378fd80919081900360200190a2505050565b6000610e52610e496022547f000000000000000000000000db96f8efd6865644993505318cc08ff9c42fb9ac6001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015610e1757600080fd5b505afa158015610e2b573d6000803e3d6000fd5b505050506040513d6020811015610e4157600080fd5b505190612eba565b60215490612eba565b905090565b3360009081526019602052604090205460ff16610eaa576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b6040805163079cc67960e41b81523360048201526024810183905290516001600160a01b037f000000000000000000000000db96f8efd6865644993505318cc08ff9c42fb9ac16916379cc679091604480830192600092919082900301818387803b158015610f1857600080fd5b505af1158015610f2c573d6000803e3d6000fd5b5050336000908152601b6020526040902054610f4b9250905082612eba565b336000908152601b6020526040902055602254610f689082612eba565b602255604080518281526020810183905281516001600160a01b037f000000000000000000000000db96f8efd6865644993505318cc08ff9c42fb9ac169233927fc6d98eecfc9c78ab62c89a82950079b54874749f1f6f24090f7acc758bc2f309929081900390910190a350565b60066020526000908152604090205460ff1681565b3360009081526019602052604090205460ff1661103e576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b6001600160a01b03811660009081526003602052604090205460ff1661109a576040805162461bcd60e51b815260206004820152600c60248201526b139bdd081858d8d95c1d195960a21b604482015290519081900360640190fd5b60006110a682846112d6565b601f54604080516370a0823160e01b815233600482015290519293506000926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b1580156110f757600080fd5b505afa15801561110b573d6000803e3d6000fd5b505050506040513d602081101561112157600080fd5b5051336000908152601b602052604081205491925090611142908390612eba565b90508083111561118e576040805162461bcd60e51b8152602060048201526012602482015271115e18d959591cc81919589d081b1a5b5a5d60721b604482015290519081900360640190fd5b336000908152601b60205260409020546111a89084612f53565b336000908152601b60205260409020556022546111c59084612f53565b6022556021546111d59084612eba565b602181905560405160008051602061368283398151915290600090a26040805163a9059cbb60e01b81523360048201526024810187905290516001600160a01b0386169163a9059cbb9160448083019260209291908290030181600087803b15801561124057600080fd5b505af1158015611254573d6000803e3d6000fd5b505050506040513d602081101561126a57600080fd5b5050604080518681526020810185905281516001600160a01b0387169233927f7e1a939bed137a819b5d2979822c67f877689f7a863d5e4cb57cdca97b2977d6929081900390910190a35050505050565b6011602052600090815260409020546001600160a01b031681565b6001600160a01b03821660009081526003602052604081205460ff16156114135761140c836001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561133357600080fd5b505afa158015611347573d6000803e3d6000fd5b505050506040513d602081101561135d57600080fd5b50516040805163313ce56760e01b8152905160ff909216600a0a91611406916001600160a01b037f000000000000000000000000db96f8efd6865644993505318cc08ff9c42fb9ac169163313ce56791600480820192602092909190829003018186803b1580156113cd57600080fd5b505afa1580156113e1573d6000803e3d6000fd5b505050506040513d60208110156113f757600080fd5b5051859060ff16600a0a612fab565b90613004565b90506114c4565b6001600160a01b0383166000908152600c602052604090205460ff16156114c4576001600160a01b03808416600081815260116020908152604091829020548251634249719f60e01b815260048101949094526024840187905291519190931692634249719f9260448082019391829003018186803b15801561149557600080fd5b505afa1580156114a9573d6000803e3d6000fd5b505050506040513d60208110156114bf57600080fd5b505190505b92915050565b60205481565b6000546001600160a01b0316331461151d576040805162461bcd60e51b81526020600482018190526024820152600080516020613662833981519152604482015290519081900360640190fd5b6000805b6002548110156115f5576115eb6115e46002838154811061153e57fe5b600091825260209091200154600280546001600160a01b03909216918590811061156457fe5b60009182526020918290200154604080516370a0823160e01b815230600482015290516001600160a01b03909216926370a0823192602480840193829003018186803b1580156115b357600080fd5b505afa1580156115c7573d6000803e3d6000fd5b505050506040513d60208110156115dd57600080fd5b50516112d6565b8390612f53565b9150600101611521565b5060005b600b548110156116465761163c6115e4600b838154811061161657fe5b600091825260209091200154600b80546001600160a01b03909216918590811061156457fe5b91506001016115f9565b506021819055604051819060008051602061368283398151915290600090a260405181907fec691f09f6924b27932253f85caf99bacc30360cc0e50a1cc4d2acc24601446690600090a250565b60088181548110610b4157600080fd5b6000546001600160a01b031633146116f0576040805162461bcd60e51b81526020600482018190526024820152600080516020613662833981519152604482015290519081900360640190fd5b6001600160a01b0381166117355760405162461bcd60e51b81526004018080602001828103825260268152602001806135f96026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917fea8258f2d9ddb679928cf34b78cf645b7feda9acc828e4dd82d014eaae270eba91a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031690565b601d6020526000908152604090205460ff1681565b6001546001600160a01b031633146117fd5760405162461bcd60e51b815260040180806020018281038252602281526020018061361f6022913960400191505060405180910390fd5b600154600080546040516001600160a01b0393841693909116917faa151555690c956fc3ea32f106bb9f119b5237a061eaa8557cff3e51e3792c8d91a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b60036020526000908152604090205460ff1681565b336000908152601d602052604090205460ff166118c6576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b6118ce610db3565b81111561191a576040805162461bcd60e51b8152602060048201526015602482015274496e73756666696369656e7420726573657276657360581b604482015290519081900360640190fd5b7f000000000000000000000000db96f8efd6865644993505318cc08ff9c42fb9ac6001600160a01b03166340c10f1983836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b15801561199157600080fd5b505af11580156119a5573d6000803e3d6000fd5b50506040805184815290516001600160a01b03861693503392507ffa8ccab40e7da8146c2304cd0950334fd30a6ba093abe86261aa13911fed849c9181900360200190a35050565b60058181548110610b4157600080fd5b60158181548110610b4157600080fd5b60046020526000908152604090205463ffffffff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b60188181548110610b4157600080fd5b60096020526000908152604090205460ff1681565b600d6020526000908152604090205463ffffffff1681565b600e8181548110610b4157600080fd5b60215481565b60076020526000908152604090205463ffffffff1681565b600f6020526000908152604090205460ff1681565b600c6020526000908152604090205460ff1681565b60176020526000908152604090205463ffffffff1681565b60146020526000908152604090205463ffffffff1681565b601c8181548110610b4157600080fd5b6001600160a01b03821660009081526003602052604081205460ff1680611b5d57506001600160a01b0383166000908152600c602052604090205460ff165b611b9d576040805162461bcd60e51b815260206004820152600c60248201526b139bdd081858d8d95c1d195960a21b604482015290519081900360640190fd5b611bb26001600160a01b038416333087613046565b6001600160a01b03831660009081526003602052604090205460ff1615611c2b573360009081526006602052604090205460ff16611c26576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b611c7e565b336000908152600f602052604090205460ff16611c7e576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b6000611c8a84866112d6565b9050611c968184612eba565b91507f000000000000000000000000db96f8efd6865644993505318cc08ff9c42fb9ac6001600160a01b03166340c10f1933846040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015611d0f57600080fd5b505af1158015611d23573d6000803e3d6000fd5b5050602154611d359250905082612f53565b602181905560405160008051602061368283398151915290600090a2604080518681526020810183905281516001600160a01b038716927f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a15928290030190a2509392505050565b600a6020526000908152604090205463ffffffff1681565b601a6020526000908152604090205463ffffffff1681565b60028181548110610b4157600080fd5b3360009081526019602052604090205460ff16611e2f576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b6001600160a01b03811660009081526003602052604090205460ff16611e8b576040805162461bcd60e51b815260206004820152600c60248201526b139bdd081858d8d95c1d195960a21b604482015290519081900360640190fd5b611ea06001600160a01b038216333085613046565b6000611eac82846112d6565b336000908152601b6020526040902054909150611ec99082612eba565b336000908152601b6020526040902055602254611ee69082612eba565b602255602154611ef69082612f53565b602181905560405160008051602061368283398151915290600090a2604080518481526020810183905281516001600160a01b0385169233927fc6d98eecfc9c78ab62c89a82950079b54874749f1f6f24090f7acc758bc2f309929081900390910190a3505050565b60166020526000908152604090205460ff1681565b601f546001600160a01b031681565b600080546001600160a01b03163314611fd1576040805162461bcd60e51b81526020600482018190526024820152600080516020613662833981519152604482015290519081900360640190fd5b6001600160a01b038216611fe457600080fd5b6000836009811115611ff257fe5b14156120615761202c63ffffffff428116907f0000000000000000000000000000000000000000000000000000000000000000906130a616565b6001600160a01b0383166000908152600760205260409020805463ffffffff191663ffffffff929092169190911790556124bf565b600183600981111561206f57fe5b14156120de576120a963ffffffff428116907f0000000000000000000000000000000000000000000000000000000000000000906130a616565b6001600160a01b0383166000908152600a60205260409020805463ffffffff191663ffffffff929092169190911790556124bf565b60028360098111156120ec57fe5b141561215b5761212663ffffffff428116907f0000000000000000000000000000000000000000000000000000000000000000906130a616565b6001600160a01b0383166000908152600460205260409020805463ffffffff191663ffffffff929092169190911790556124bf565b600383600981111561216957fe5b14156121ec576121b76121a763ffffffff7f000000000000000000000000000000000000000000000000000000000000000081169060029061310716565b63ffffffff42811691906130a616565b6001600160a01b0383166000908152601460205260409020805463ffffffff191663ffffffff929092169190911790556124bf565b60048360098111156121fa57fe5b14156122695761223463ffffffff428116907f0000000000000000000000000000000000000000000000000000000000000000906130a616565b6001600160a01b0383166000908152601060205260409020805463ffffffff191663ffffffff929092169190911790556124bf565b600583600981111561227757fe5b14156122e6576122b163ffffffff428116907f0000000000000000000000000000000000000000000000000000000000000000906130a616565b6001600160a01b0383166000908152600d60205260409020805463ffffffff191663ffffffff929092169190911790556124bf565b60068360098111156122f457fe5b1415612367576123326121a763ffffffff7f000000000000000000000000000000000000000000000000000000000000000081169060029061310716565b6001600160a01b0383166000908152601760205260409020805463ffffffff191663ffffffff929092169190911790556124bf565b600783600981111561237557fe5b14156123e4576123af63ffffffff428116907f0000000000000000000000000000000000000000000000000000000000000000906130a616565b6001600160a01b0383166000908152601a60205260409020805463ffffffff191663ffffffff929092169190911790556124bf565b60088360098111156123f257fe5b14156124615761242c63ffffffff428116907f0000000000000000000000000000000000000000000000000000000000000000906130a616565b6001600160a01b0383166000908152601e60205260409020805463ffffffff191663ffffffff929092169190911790556124bf565b600983600981111561246f57fe5b14156124b7576124a963ffffffff428116907f0000000000000000000000000000000000000000000000000000000000000000906130a616565b63ffffffff166020556124bf565b5060006114c4565b8260098111156124cb57fe5b604080516001600160a01b038516815290517f0e4f2c4b5bc209d509bc3d49348c787fefadc66a79351b470599ac0f5be52eaf9181900360200190a250600192915050565b60136020526000908152604090205460ff1681565b60196020526000908152604090205460ff1681565b7f000000000000000000000000db96f8efd6865644993505318cc08ff9c42fb9ac81565b601e6020526000908152604090205463ffffffff1681565b600080546001600160a01b031633146125c4576040805162461bcd60e51b81526020600482018190526024820152600080516020613662833981519152604482015290519081900360640190fd5b6001600160a01b0383166125d757600080fd5b6000808560098111156125e657fe5b14156126ac576125f96007600686613178565b1561267c576001600160a01b0384166000908152600760205260409020805463ffffffff1916905561262c600585613271565b61267c57600580546001810182556000919091527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db00180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152600660205260409020805460ff81161560ff199091168117909155612e2e565b60018560098111156126ba57fe5b1415612780576126cd600a600986613178565b15612750576001600160a01b0384166000908152600a60205260409020805463ffffffff19169055612700600885613271565b61275057600880546001810182556000919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152600960205260409020805460ff81161560ff199091168117909155612e2e565b600285600981111561278e57fe5b1415612854576127a16004600386613178565b15612824576001600160a01b0384166000908152600460205260409020805463ffffffff191690556127d4600285613271565b61282457600280546001810182556000919091527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152600360205260409020805460ff81161560ff199091168117909155612e2e565b600385600981111561286257fe5b1415612965576128756014601386613178565b1561293557601280546001810182557fbb8a6a4669ba250d26cd7a459eca9d215f8307e33aebe50379bc5a3617ec34440180546001600160a01b0319166001600160a01b0387169081179091556000908152601460205260409020805463ffffffff191690556128e59085613271565b61293557601280546001810182556000919091527fbb8a6a4669ba250d26cd7a459eca9d215f8307e33aebe50379bc5a3617ec34440180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152601360205260409020805460ff81161560ff199091168117909155612e2e565b600485600981111561297357fe5b1415612a76576129866010600f86613178565b15612a4657600e80546001810182557fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fd0180546001600160a01b0319166001600160a01b0387169081179091556000908152601060205260409020805463ffffffff191690556129f69085613271565b612a4657600e80546001810182556000919091527fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fd0180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152600f60205260409020805460ff81161560ff199091168117909155612e2e565b6005856009811115612a8457fe5b1415612b6c57612a97600d600c86613178565b15612b1a576001600160a01b0384166000908152600d60205260409020805463ffffffff19169055612aca600b85613271565b612b1a57600b80546001810182556000919091527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b038381166000908152600c60209081526040808320805460ff81161560ff199091168117909155601190925290912080546001600160a01b03191692851692909217909155612e2e565b6006856009811115612b7a57fe5b1415612c4057612b8d6017601686613178565b15612c10576001600160a01b0384166000908152601760205260409020805463ffffffff19169055612bc0601585613271565b612c1057601580546001810182556000919091527f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec4750180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152601660205260409020805460ff81161560ff199091168117909155612e2e565b6007856009811115612c4e57fe5b1415612d1457612c61601a601986613178565b15612ce4576001600160a01b0384166000908152601a60205260409020805463ffffffff19169055612c94601885613271565b612ce457601880546001810182556000919091527fb13d2d76d1f4b7be834882e410b3e3a8afaf69f83600ae24db354391d2378d2e0180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152601960205260409020805460ff81161560ff199091168117909155612e2e565b6008856009811115612d2257fe5b1415612de857612d35601e601d86613178565b15612db8576001600160a01b0384166000908152601e60205260409020805463ffffffff19169055612d68601c85613271565b612db857601c80546001810182556000919091527f0e4562a10381dec21b205ed72637e6b1b523bdd0e4d4d50af5cd23dd4500a2110180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152601d60205260409020805460ff81161560ff199091168117909155612e2e565b6009856009811115612df657fe5b1415612e2457506000602055601f80546001600160a01b0319166001600160a01b0385161790556001612e2e565b6000915050612e85565b846009811115612e3a57fe5b604080516001600160a01b0387168152831515602082015281517f0dcacb7e392f3d6a216ed2660e3dcfd40b7793d33591db2ba185a6b8e44fc477929181900390910190a260019150505b9392505050565b60225481565b600b8181548110610b4157600080fd5b60106020526000908152604090205463ffffffff1681565b6000612e8583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506132c1565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052612f4e908490613358565b505050565b600082820183811015612e85576040805162461bcd60e51b815260206004820152601b60248201527a536166654d6174683a206164646974696f6e206f766572666c6f7760281b604482015290519081900360640190fd5b600082612fba575060006114c4565b82820282848281612fc757fe5b0414612e855760405162461bcd60e51b81526004018080602001828103825260218152602001806136416021913960400191505060405180910390fd5b6000612e8583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613409565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b1790526130a0908590613358565b50505050565b600082820163ffffffff8085169082161015612e85576040805162461bcd60e51b815260206004820152601b60248201527a536166654d6174683a206164646974696f6e206f766572666c6f7760281b604482015290519081900360640190fd5b600063ffffffff831661311c575060006114c4565b82820263ffffffff808416908086169083168161313557fe5b0463ffffffff1614612e855760405162461bcd60e51b81526004018080602001828103825260218152602001806136416021913960400191505060405180910390fd5b6001600160a01b03811660009081526020839052604081205460ff16613267576001600160a01b03821660009081526020859052604090205463ffffffff166131f5576040805162461bcd60e51b815260206004820152600a6024820152694d75737420717565756560b01b604482015290519081900360640190fd5b6001600160a01b03821660009081526020859052604090205463ffffffff4281169116111561325f576040805162461bcd60e51b8152602060048201526011602482015270145d595d59481b9bdd08195e1c1a5c9959607a1b604482015290519081900360640190fd5b506001612e85565b5060009392505050565b6000805b835481101561326757826001600160a01b031684828154811061329457fe5b6000918252602090912001546001600160a01b031614156132b95760019150506114c4565b600101613275565b600081848411156133505760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156133155781810151838201526020016132fd565b50505050905090810190601f1680156133425780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60606133ad826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661346e9092919063ffffffff16565b805190915015612f4e578080602001905160208110156133cc57600080fd5b5051612f4e5760405162461bcd60e51b815260040180806020018281038252602a8152602001806136a2602a913960400191505060405180910390fd5b600081836134585760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156133155781810151838201526020016132fd565b50600083858161346457fe5b0495945050505050565b606061347d8484600085613485565b949350505050565b6060613490856135f2565b6134e1576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b602083106135205780518252601f199092019160209182019101613501565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114613582576040519150601f19603f3d011682016040523d82523d6000602084013e613587565b606091505b5091509150811561359b57915061347d9050565b8051156135ab5780518082602001fd5b60405162461bcd60e51b81526020600482018181528651602484015286518793919283926044019190850190808383600083156133155781810151838201526020016132fd565b3b15159056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734f776e61626c653a206d757374206265206e6577206f776e657220746f2070756c6c536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657293bb8edd35984706eee1b92541281f7f62d33c01c5b2ec0929a113603bd21d665361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a26469706673582212200f5ff9f6ce53c47bb1bfc404e13a4a7753cf53730888048a1d6d6d8356fcdd8964736f6c63430007050033

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

000000000000000000000000db96f8efd6865644993505318cc08ff9c42fb9ac000000000000000000000000fea7a6a0b346362bf88a9e4a88416b77a57d6c2a0000000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _Z2O (address): 0xdb96f8efd6865644993505318cc08FF9C42fb9aC
Arg [1] : _MIM (address): 0xFEa7a6a0B346362BF88A9e4A88416B77a57D6c2A
Arg [2] : _secondsNeededForQueue (uint32): 0

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000db96f8efd6865644993505318cc08ff9c42fb9ac
Arg [1] : 000000000000000000000000fea7a6a0b346362bf88a9e4a88416b77a57d6c2a
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000000


Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.