Contract 0x2f87a9550f19666cef5de29c5f613966cf164be6 2

Txn Hash Method
Block
From
To
Value [Txn Fee]
0x034616e8c0d28df43b7a4791146fc2a12a8623a1ee6de5e26951e94fc94c118dManage94415462022-01-11 20:27:26167 days 2 hrs ago0x304a97c9a85c92c93ca24e0a85b69f892b67355e IN  0x2f87a9550f19666cef5de29c5f613966cf164be60 AVAX0.002824325 25
0x2f39ab5d2f0a9c63d6b9e1222d46eaaf8e43dca8e0952c5ca63c9b0000da9adaManage93641242022-01-10 1:36:43168 days 21 hrs ago0x304a97c9a85c92c93ca24e0a85b69f892b67355e IN  0x2f87a9550f19666cef5de29c5f613966cf164be60 AVAX0.0014013 25
0x0ea3964fccd5f6ca22f8a525805ca86a20c83913d5d4dd74ce84947ae69811a7Manage93277182022-01-09 5:29:15169 days 17 hrs ago0x304a97c9a85c92c93ca24e0a85b69f892b67355e IN  0x2f87a9550f19666cef5de29c5f613966cf164be60 AVAX0.002080375 25
0x737482494321fbdac1134745374bc7e7a8c7eb9dd7866deb8009b491e823e691Manage93094842022-01-08 19:18:48170 days 3 hrs ago0x304a97c9a85c92c93ca24e0a85b69f892b67355e IN  0x2f87a9550f19666cef5de29c5f613966cf164be60 AVAX0.002141863578 25.746337689
0xb3a9e9d65a1ec658fd8500ce41c5468a780a1f9afe5af23a1af9bfb933da48dcManage93092662022-01-08 19:11:43170 days 4 hrs ago0x304a97c9a85c92c93ca24e0a85b69f892b67355e IN  0x2f87a9550f19666cef5de29c5f613966cf164be60 AVAX0.002325413874 27.952709727
0xad1ad4d57d5965e7246654b17cb7dd1fa83f6087e67914fd020f6d183bfb3670Manage93012962022-01-08 14:54:04170 days 8 hrs ago0x304a97c9a85c92c93ca24e0a85b69f892b67355e IN  0x2f87a9550f19666cef5de29c5f613966cf164be60 AVAX0.0016297 25
0x112e1f5db836498f386a505aa77293f8cc1bd929176b9fdde05ac331e1a6b2a0Manage93011452022-01-08 14:49:01170 days 8 hrs ago0x304a97c9a85c92c93ca24e0a85b69f892b67355e IN  0x2f87a9550f19666cef5de29c5f613966cf164be60 AVAX0.0016288 25
0x7aa31fce09e1d014c734f6d1e50b77ef0e57df9e9e09dfadbc9685efcfcfaeaeManage93008632022-01-08 14:39:29170 days 8 hrs ago0x304a97c9a85c92c93ca24e0a85b69f892b67355e IN  0x2f87a9550f19666cef5de29c5f613966cf164be60 AVAX0.0016288 25
0x6cb7f810af2b3ba727b705d4619c512571890558f4668c7fc1e348c5ab5357d8Manage93006442022-01-08 14:32:11170 days 8 hrs ago0x304a97c9a85c92c93ca24e0a85b69f892b67355e IN  0x2f87a9550f19666cef5de29c5f613966cf164be60 AVAX0.0016291 25
0x5b05897b14611f1417f8e71ad5b136dac7812f5ba0a4b56c5123607df07bf498Manage93004732022-01-08 14:26:23170 days 8 hrs ago0x304a97c9a85c92c93ca24e0a85b69f892b67355e IN  0x2f87a9550f19666cef5de29c5f613966cf164be60 AVAX0.0016291 25
0x6ef6ebf522ef8cbfe086281b54ec143250a414021397a0107dbf3a6a496b7237Manage92963632022-01-08 12:09:03170 days 11 hrs ago0x304a97c9a85c92c93ca24e0a85b69f892b67355e IN  0x2f87a9550f19666cef5de29c5f613966cf164be60 AVAX0.0016288 25
0x4817ee7bf4073ea31f091d508a261c8321879c2208327df52ade2f69cf5a77f4Manage91986962022-01-06 6:02:42172 days 17 hrs ago0x304a97c9a85c92c93ca24e0a85b69f892b67355e IN  0x2f87a9550f19666cef5de29c5f613966cf164be60 AVAX0.00220475 25
0xb4fb6f22810868239ac26a463290b67b933bd0094177489de3a4163db8c63bd2Manage91984592022-01-06 5:54:43172 days 17 hrs ago0x304a97c9a85c92c93ca24e0a85b69f892b67355e IN  0x2f87a9550f19666cef5de29c5f613966cf164be60 AVAX0.002107075 25
0x230c2a2b9ff1f320f2a217db269d8e5bb98c18ced49b46cc1f83a956ad201a46Manage91564512022-01-05 6:22:20173 days 16 hrs ago0x304a97c9a85c92c93ca24e0a85b69f892b67355e IN  0x2f87a9550f19666cef5de29c5f613966cf164be60 AVAX0.0016291 25
0xebd818036b7a3f5a2c02cfb337b2462546498ecb6ec961344e6fca59758a75edManage91563752022-01-05 6:19:47173 days 16 hrs ago0x304a97c9a85c92c93ca24e0a85b69f892b67355e IN  0x2f87a9550f19666cef5de29c5f613966cf164be60 AVAX0.0016291 25
0x1798d0f33d48ac0291bb15e4a82c83325cc36677bd383b05f349e672d45038a5Manage91556542022-01-05 5:55:27173 days 17 hrs ago0x304a97c9a85c92c93ca24e0a85b69f892b67355e IN  0x2f87a9550f19666cef5de29c5f613966cf164be60 AVAX0.0016291 25
0x8d7728e7b8518de771c16509c9b92228cbea46cff13d70b92f87f38b2273a546Manage91532862022-01-05 4:35:54173 days 18 hrs ago0x304a97c9a85c92c93ca24e0a85b69f892b67355e IN  0x2f87a9550f19666cef5de29c5f613966cf164be60 AVAX0.0016291 25
0x4cf23f85a19e1f0caf0ede6c14b74504a6436aa6c55224310acbb01a023ee59aManage91525832022-01-05 4:12:11173 days 19 hrs ago0x304a97c9a85c92c93ca24e0a85b69f892b67355e IN  0x2f87a9550f19666cef5de29c5f613966cf164be60 AVAX0.0016291 25
0x163ed8c59a392c7baea43faa1bfe540808ec9d8fc3f22174b39e891bf7daf67aManage91525662022-01-05 4:11:38173 days 19 hrs ago0x304a97c9a85c92c93ca24e0a85b69f892b67355e IN  0x2f87a9550f19666cef5de29c5f613966cf164be60 AVAX0.0014013 25
0x5d97af53887fd05206c2cb4d015f2dadc7fff822e175a2cbc8b5830c1bf89745Manage91515742022-01-05 3:38:09173 days 19 hrs ago0x304a97c9a85c92c93ca24e0a85b69f892b67355e IN  0x2f87a9550f19666cef5de29c5f613966cf164be60 AVAX0.0016291 25
0x366b7c04819151af7bbcf6e25bbff455a8adceb84c83b3011636a5377b26a89eManage91508142022-01-05 3:12:32173 days 20 hrs ago0x304a97c9a85c92c93ca24e0a85b69f892b67355e IN  0x2f87a9550f19666cef5de29c5f613966cf164be60 AVAX0.0016291 25
0x48954e9e54a9a54bf742c691a4a549f7c7a62fc67e039b9a6b0c3eeb62ae2f14Manage91502562022-01-05 2:53:45173 days 20 hrs ago0x304a97c9a85c92c93ca24e0a85b69f892b67355e IN  0x2f87a9550f19666cef5de29c5f613966cf164be60 AVAX0.0016291 25
0x829f3a25903fe8e89ec9161e6f1ed4923aa11d7f00573ef0d6dfd287a623612aManage91487752022-01-05 2:04:09173 days 21 hrs ago0x304a97c9a85c92c93ca24e0a85b69f892b67355e IN  0x2f87a9550f19666cef5de29c5f613966cf164be60 AVAX0.0016291 25
0x9695bd9c3344e26ed8ae2035695055f689306e8fb84334aadce4b09fd45b1d62Manage91482882022-01-05 1:47:41173 days 21 hrs ago0x304a97c9a85c92c93ca24e0a85b69f892b67355e IN  0x2f87a9550f19666cef5de29c5f613966cf164be60 AVAX0.0016291 25
0xeeca6ffc02f437285f8be42469674dd6f4a5ee8e19a4d315fb2a30fdf6a2e12fManage91481452022-01-05 1:42:54173 days 21 hrs ago0x304a97c9a85c92c93ca24e0a85b69f892b67355e IN  0x2f87a9550f19666cef5de29c5f613966cf164be60 AVAX0.0016291 25
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
OlympusTreasury

Compiler Version
v0.7.5+commit.eb77ed08

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at snowtrace.io on 2021-11-14
*/

// 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 sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

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

        return c;
    }

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

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

        return c;
    }

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

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

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 OlympusTreasury is Ownable {

    using SafeMath for uint;
    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 RUG;
    uint public immutable blocksNeededForQueue;

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

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

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

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

    address[] public liquidityDepositors; // Push only, beware false-positives. Only for viewing.
    mapping( address => bool ) public isLiquidityDepositor;
    mapping( address => uint ) 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 => uint ) public ReserveManagerQueue; // Delays changes to mapping.

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

    address[] public debtors; // Push only, beware false-positives. Only for viewing.
    mapping( address => bool ) public isDebtor;
    mapping( address => uint ) 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 => uint ) public rewardManagerQueue; // Delays changes to mapping.

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

    constructor (
        address _RUG,
        address _DAI,
        address _MIM,
        address _RUGDAI,
        uint _blocksNeededForQueue
    ) {
        require( _RUG != address(0) );
        RUG = _RUG;

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

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

       isLiquidityToken[ _RUGDAI ] = true;
       liquidityTokens.push( _RUGDAI );

        blocksNeededForQueue = _blocksNeededForQueue;
    }

    /**
        @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( RUG ).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( RUG ).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( sOHM ).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( RUG ).burnFrom( msg.sender, _amount );

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

        emit RepayDebt( msg.sender, RUG, _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( RUG ).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( RUG ).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 RUG 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 RUG decimals
            value_ = _amount.mul( 10 ** IERC20( RUG ).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 ] = block.number.add( blocksNeededForQueue );
        } else if ( _managing == MANAGING.RESERVESPENDER ) { // 1
            reserveSpenderQueue[ _address ] = block.number.add( blocksNeededForQueue );
        } else if ( _managing == MANAGING.RESERVETOKEN ) { // 2
            reserveTokenQueue[ _address ] = block.number.add( blocksNeededForQueue );
        } else if ( _managing == MANAGING.RESERVEMANAGER ) { // 3
            ReserveManagerQueue[ _address ] = block.number.add( blocksNeededForQueue.mul( 2 ) );
        } else if ( _managing == MANAGING.LIQUIDITYDEPOSITOR ) { // 4
            LiquidityDepositorQueue[ _address ] = block.number.add( blocksNeededForQueue );
        } else if ( _managing == MANAGING.LIQUIDITYTOKEN ) { // 5
            LiquidityTokenQueue[ _address ] = block.number.add( blocksNeededForQueue );
        } else if ( _managing == MANAGING.LIQUIDITYMANAGER ) { // 6
            LiquidityManagerQueue[ _address ] = block.number.add( blocksNeededForQueue.mul( 2 ) );
        } else if ( _managing == MANAGING.DEBTOR ) { // 7
            debtorQueue[ _address ] = block.number.add( blocksNeededForQueue );
        } else if ( _managing == MANAGING.REWARDMANAGER ) { // 8
            rewardManagerQueue[ _address ] = block.number.add( blocksNeededForQueue );
        } else if ( _managing == MANAGING.SOHM ) { // 9
            sOHMQueue = block.number.add( blocksNeededForQueue );
        } 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;
            sOHM = _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 => uint ) 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 ] <= block.number, "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;
    }
}

Contract ABI

[{"inputs":[{"internalType":"address","name":"_RUG","type":"address"},{"internalType":"address","name":"_DAI","type":"address"},{"internalType":"address","name":"_MIM","type":"address"},{"internalType":"address","name":"_RUGDAI","type":"address"},{"internalType":"uint256","name":"_blocksNeededForQueue","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"enum OlympusTreasury.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 OlympusTreasury.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":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"LiquidityManagerQueue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"LiquidityTokenQueue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RUG","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"ReserveManagerQueue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"auditReserves","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"blocksNeededForQueue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"uint256","name":"","type":"uint256"}],"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 OlympusTreasury.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":"uint256","name":"","type":"uint256"}],"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":"uint256","name":"","type":"uint256"}],"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":"uint256","name":"","type":"uint256"}],"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":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"rewardManagers","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sOHM","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sOHMQueue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"enum OlympusTreasury.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"}]

60c060405234801561001057600080fd5b506040516200368938038062003689833981810160405260a081101561003557600080fd5b50805160208201516040808401516060850151608090950151600080546001600160a01b031916331780825593519596949592949391926001600160a01b0392909216917fea8258f2d9ddb679928cf34b78cf645b7feda9acc828e4dd82d014eaae270eba908290a36001600160a01b0385166100b157600080fd5b606085901b6001600160601b0319166080526001600160a01b0393841660008181526003602090815260408083208054600160ff1991821681179092556002805480840182557f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace90810180546001600160a01b03199081169099179055998b1680875284872080548416851790558154808501909255990180548716909917909855958816808452600c909252822080549096168517909555600b8054948501815581527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db9909301805490911690931790925560a08290529190921691906134679062000222903980611db6528061200f528061206b52806120c75280612125528061218a52806121e6528061224452806122a252806122fe528061235a525080610a355280610dd75280610ee85280610f9c52806113ac52806119425280611c7e5280611f7252506134676000f3fe608060405234801561001057600080fd5b50600436106102f05760003560e01c806387d67dff1161019d578063d031370b116100e9578063ebd83cd8116100a2578063fbfd393b1161007c578063fbfd393b146108ef578063fc7b9c1814610926578063fd1ec0101461092e578063fff9ee871461094b576102f0565b8063ebd83cd81461087d578063ee4e19a1146108a3578063fb939588146108c9576102f0565b8063d031370b146107cf578063d07f390f146107ec578063d796ffb8146107f4578063df89b34414610820578063e4f7b6fd14610846578063e83afee31461084e576102f0565b8063a569e57111610156578063b5b1d56011610130578063b5b1d56014610734578063bc157ac114610751578063c24ad43e14610783578063cd85641a146107a9576102f0565b8063a569e571146106c2578063ab319c9a146106e8578063b1bd38b01461070e576102f0565b806387d67dff146106055780638f59c7271461062b5780638f6a7b57146106515780638f840ddd1461066e578063932cc8c314610676578063a1210a2d1461069c576102f0565b80632789de371161025c5780635a96ac0a116102155780636b5e40a7116101ef5780636b5e40a71461058857806370a0502a146105a5578063788c6c01146105c2578063869871bf146105e8576102f0565b80635a96ac0a1461052e57806368c31dd5146105365780636a20de921461055c576102f0565b80632789de37146104ad5780632b7ce500146104b5578063437f7912146104bd57806346f68ee9146104da578063481c6a75146105005780634e83423c14610508576102f0565b80630f70431f116102ae5780630f70431f146103d0578063124154ca146103ed57806312422d231461042757806315079925146104535780631af4da701461045b5780631eec5a9a14610481576102f0565b8062f714ce146102f55780630619aff114610323578063089208d81461035c578063094a8651146103645780630b0eee301461039c5780630c3513a8146103c8575b600080fd5b6103216004803603604081101561030b57600080fd5b50803590602001356001600160a01b0316610971565b005b6103406004803603602081101561033957600080fd5b5035610b48565b604080516001600160a01b039092168252519081900360200190f35b610321610b72565b61038a6004803603602081101561037a57600080fd5b50356001600160a01b0316610c09565b60408051918252519081900360200190f35b610321600480360360408110156103b257600080fd5b506001600160a01b038135169060200135610c1b565b61038a610dca565b610321600480360360208110156103e657600080fd5b5035610e6e565b6104136004803603602081101561040357600080fd5b50356001600160a01b0316610fed565b604080519115158252519081900360200190f35b6103216004803603604081101561043d57600080fd5b50803590602001356001600160a01b0316611002565b6103406112d2565b6103406004803603602081101561047157600080fd5b50356001600160a01b03166112e1565b61038a6004803603604081101561049757600080fd5b506001600160a01b0381351690602001356112fc565b61038a6114f0565b6103216114f6565b610340600480360360208110156104d357600080fd5b50356116b9565b610321600480360360208110156104f057600080fd5b50356001600160a01b03166116c9565b6103406117b6565b6104136004803603602081101561051e57600080fd5b50356001600160a01b03166117c5565b6103216117da565b6104136004803603602081101561054c57600080fd5b50356001600160a01b0316611884565b6103216004803603604081101561057257600080fd5b506001600160a01b038135169060200135611899565b6103406004803603602081101561059e57600080fd5b5035611a13565b610340600480360360208110156105bb57600080fd5b5035611a23565b61038a600480360360208110156105d857600080fd5b50356001600160a01b0316611a33565b610340600480360360208110156105fe57600080fd5b5035611a45565b6104136004803603602081101561061b57600080fd5b50356001600160a01b0316611a55565b61038a6004803603602081101561064157600080fd5b50356001600160a01b0316611a6a565b6103406004803603602081101561066757600080fd5b5035611a7c565b61038a611a8c565b61038a6004803603602081101561068c57600080fd5b50356001600160a01b0316611a92565b610413600480360360208110156106b257600080fd5b50356001600160a01b0316611aa4565b610413600480360360208110156106d857600080fd5b50356001600160a01b0316611ab9565b61038a600480360360208110156106fe57600080fd5b50356001600160a01b0316611ace565b61038a6004803603602081101561072457600080fd5b50356001600160a01b0316611ae0565b6103406004803603602081101561074a57600080fd5b5035611af2565b61038a6004803603606081101561076757600080fd5b508035906001600160a01b036020820135169060400135611b02565b61038a6004803603602081101561079957600080fd5b50356001600160a01b0316611d80565b61038a600480360360208110156107bf57600080fd5b50356001600160a01b0316611d92565b610340600480360360208110156107e557600080fd5b5035611da4565b61038a611db4565b6103216004803603604081101561080a57600080fd5b50803590602001356001600160a01b0316611dd8565b6104136004803603602081101561083657600080fd5b50356001600160a01b0316611f5b565b610340611f70565b6104136004803603604081101561086457600080fd5b50803560ff1690602001356001600160a01b0316611f94565b6104136004803603602081101561089357600080fd5b50356001600160a01b03166123df565b610413600480360360208110156108b957600080fd5b50356001600160a01b03166123f4565b61038a600480360360208110156108df57600080fd5b50356001600160a01b0316612409565b6104136004803603606081101561090557600080fd5b5060ff813516906001600160a01b036020820135811691604001351661241b565b61038a612cd7565b6103406004803603602081101561094457600080fd5b5035612cdd565b61038a6004803603602081101561096157600080fd5b50356001600160a01b0316612ced565b6001600160a01b03811660009081526003602052604090205460ff166109cd576040805162461bcd60e51b815260206004820152600c60248201526b139bdd081858d8d95c1d195960a21b604482015290519081900360640190fd5b3360009081526009602052604090205460ff161515600114610a25576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b6000610a3182846112fc565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166379cc679033836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015610aaa57600080fd5b505af1158015610abe573d6000803e3d6000fd5b5050602154610ad09250905082612cff565b60218190556040516000805160206133e883398151915290600090a2610b006001600160a01b0383163385612d41565b604080518481526020810183905281516001600160a01b038516927fdf273cb619d95419a9cd0ec88123a0538c85064229baa6363788f743fff90deb928290030190a2505050565b60128181548110610b5857600080fd5b6000918252602090912001546001600160a01b0316905081565b6000546001600160a01b03163314610bbf576040805162461bcd60e51b815260206004820181905260248201526000805160206133c8833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907fea8258f2d9ddb679928cf34b78cf645b7feda9acc828e4dd82d014eaae270eba908390a3600080546001600160a01b0319169055565b601b6020526000908152604090205481565b6001600160a01b0382166000908152600c602052604090205460ff1615610c94573360009081526016602052604090205460ff16610c8f576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b610ce7565b3360009081526013602052604090205460ff16610ce7576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b6000610cf383836112fc565b9050610cfd610dca565b811115610d49576040805162461bcd60e51b8152602060048201526015602482015274496e73756666696369656e7420726573657276657360581b604482015290519081900360640190fd5b602154610d569082612cff565b60218190556040516000805160206133e883398151915290600090a2610d866001600160a01b0384163384612d41565b6040805183815290516001600160a01b038516917f2bb2640731848fe9820ba48dbc978c1fc9bbd5f11b948bfab05b7dee3378fd80919081900360200190a2505050565b6000610e69610e606022547f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015610e2e57600080fd5b505afa158015610e42573d6000803e3d6000fd5b505050506040513d6020811015610e5857600080fd5b505190612cff565b60215490612cff565b905090565b3360009081526019602052604090205460ff16610ec1576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b6040805163079cc67960e41b81523360048201526024810183905290516001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916379cc679091604480830192600092919082900301818387803b158015610f2f57600080fd5b505af1158015610f43573d6000803e3d6000fd5b5050336000908152601b6020526040902054610f629250905082612cff565b336000908152601b6020526040902055602254610f7f9082612cff565b602255604080518281526020810183905281516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169233927fc6d98eecfc9c78ab62c89a82950079b54874749f1f6f24090f7acc758bc2f309929081900390910190a350565b60066020526000908152604090205460ff1681565b3360009081526019602052604090205460ff16611055576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b6001600160a01b03811660009081526003602052604090205460ff166110b1576040805162461bcd60e51b815260206004820152600c60248201526b139bdd081858d8d95c1d195960a21b604482015290519081900360640190fd5b60006110bd82846112fc565b601f54604080516370a0823160e01b815233600482015290519293506000926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b15801561110e57600080fd5b505afa158015611122573d6000803e3d6000fd5b505050506040513d602081101561113857600080fd5b5051336000908152601b602052604081205491925090611159908390612cff565b9050808311156111a5576040805162461bcd60e51b8152602060048201526012602482015271115e18d959591cc81919589d081b1a5b5a5d60721b604482015290519081900360640190fd5b336000908152601b60205260409020546111bf9084612d98565b336000908152601b60205260409020556022546111dc9084612d98565b6022556021546111ec9084612cff565b60218190556040516000805160206133e883398151915290600090a26040805163a9059cbb60e01b81523360048201526024810187905290516001600160a01b0386169163a9059cbb9160448083019260209291908290030181600087803b15801561125757600080fd5b505af115801561126b573d6000803e3d6000fd5b505050506040513d602081101561128157600080fd5b5050604080518681526020810185905281516001600160a01b0387169233927f7e1a939bed137a819b5d2979822c67f877689f7a863d5e4cb57cdca97b2977d6929081900390910190a35050505050565b601f546001600160a01b031681565b6011602052600090815260409020546001600160a01b031681565b6001600160a01b03821660009081526003602052604081205460ff161561143957611432836001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561135957600080fd5b505afa15801561136d573d6000803e3d6000fd5b505050506040513d602081101561138357600080fd5b50516040805163313ce56760e01b8152905160ff909216600a0a9161142c916001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163313ce56791600480820192602092909190829003018186803b1580156113f357600080fd5b505afa158015611407573d6000803e3d6000fd5b505050506040513d602081101561141d57600080fd5b5051859060ff16600a0a612df2565b90612e4b565b90506114ea565b6001600160a01b0383166000908152600c602052604090205460ff16156114ea576001600160a01b03808416600081815260116020908152604091829020548251634249719f60e01b815260048101949094526024840187905291519190931692634249719f9260448082019391829003018186803b1580156114bb57600080fd5b505afa1580156114cf573d6000803e3d6000fd5b505050506040513d60208110156114e557600080fd5b505190505b92915050565b60205481565b6000546001600160a01b03163314611543576040805162461bcd60e51b815260206004820181905260248201526000805160206133c8833981519152604482015290519081900360640190fd5b6000805b60025481101561161b5761161161160a6002838154811061156457fe5b600091825260209091200154600280546001600160a01b03909216918590811061158a57fe5b60009182526020918290200154604080516370a0823160e01b815230600482015290516001600160a01b03909216926370a0823192602480840193829003018186803b1580156115d957600080fd5b505afa1580156115ed573d6000803e3d6000fd5b505050506040513d602081101561160357600080fd5b50516112fc565b8390612d98565b9150600101611547565b5060005b600b5481101561166c5761166261160a600b838154811061163c57fe5b600091825260209091200154600b80546001600160a01b03909216918590811061158a57fe5b915060010161161f565b50602181905560405181906000805160206133e883398151915290600090a260405181907fec691f09f6924b27932253f85caf99bacc30360cc0e50a1cc4d2acc24601446690600090a250565b60088181548110610b5857600080fd5b6000546001600160a01b03163314611716576040805162461bcd60e51b815260206004820181905260248201526000805160206133c8833981519152604482015290519081900360640190fd5b6001600160a01b03811661175b5760405162461bcd60e51b815260040180806020018281038252602681526020018061335f6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917fea8258f2d9ddb679928cf34b78cf645b7feda9acc828e4dd82d014eaae270eba91a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031690565b601d6020526000908152604090205460ff1681565b6001546001600160a01b031633146118235760405162461bcd60e51b81526004018080602001828103825260228152602001806133856022913960400191505060405180910390fd5b600154600080546040516001600160a01b0393841693909116917faa151555690c956fc3ea32f106bb9f119b5237a061eaa8557cff3e51e3792c8d91a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b60036020526000908152604090205460ff1681565b336000908152601d602052604090205460ff166118ec576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b6118f4610dca565b811115611940576040805162461bcd60e51b8152602060048201526015602482015274496e73756666696369656e7420726573657276657360581b604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166340c10f1983836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b1580156119b757600080fd5b505af11580156119cb573d6000803e3d6000fd5b50506040805184815290516001600160a01b03861693503392507ffa8ccab40e7da8146c2304cd0950334fd30a6ba093abe86261aa13911fed849c9181900360200190a35050565b60058181548110610b5857600080fd5b60158181548110610b5857600080fd5b60046020526000908152604090205481565b60188181548110610b5857600080fd5b60096020526000908152604090205460ff1681565b600d6020526000908152604090205481565b600e8181548110610b5857600080fd5b60215481565b60076020526000908152604090205481565b600f6020526000908152604090205460ff1681565b600c6020526000908152604090205460ff1681565b60176020526000908152604090205481565b60146020526000908152604090205481565b601c8181548110610b5857600080fd5b6001600160a01b03821660009081526003602052604081205460ff1680611b4157506001600160a01b0383166000908152600c602052604090205460ff165b611b81576040805162461bcd60e51b815260206004820152600c60248201526b139bdd081858d8d95c1d195960a21b604482015290519081900360640190fd5b611b966001600160a01b038416333087612e8d565b6001600160a01b03831660009081526003602052604090205460ff1615611c0f573360009081526006602052604090205460ff16611c0a576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b611c62565b336000908152600f602052604090205460ff16611c62576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b6000611c6e84866112fc565b9050611c7a8184612cff565b91507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166340c10f1933846040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015611cf357600080fd5b505af1158015611d07573d6000803e3d6000fd5b5050602154611d199250905082612d98565b60218190556040516000805160206133e883398151915290600090a2604080518681526020810183905281516001600160a01b038716927f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a15928290030190a2509392505050565b600a6020526000908152604090205481565b601a6020526000908152604090205481565b60028181548110610b5857600080fd5b7f000000000000000000000000000000000000000000000000000000000000000081565b3360009081526019602052604090205460ff16611e2b576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b6001600160a01b03811660009081526003602052604090205460ff16611e87576040805162461bcd60e51b815260206004820152600c60248201526b139bdd081858d8d95c1d195960a21b604482015290519081900360640190fd5b611e9c6001600160a01b038216333085612e8d565b6000611ea882846112fc565b336000908152601b6020526040902054909150611ec59082612cff565b336000908152601b6020526040902055602254611ee29082612cff565b602255602154611ef29082612d98565b60218190556040516000805160206133e883398151915290600090a2604080518481526020810183905281516001600160a01b0385169233927fc6d98eecfc9c78ab62c89a82950079b54874749f1f6f24090f7acc758bc2f309929081900390910190a3505050565b60166020526000908152604090205460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b600080546001600160a01b03163314611fe2576040805162461bcd60e51b815260206004820181905260248201526000805160206133c8833981519152604482015290519081900360640190fd5b6001600160a01b038216611ff557600080fd5b600083600981111561200357fe5b141561205157612033437f0000000000000000000000000000000000000000000000000000000000000000612d98565b6001600160a01b03831660009081526007602052604090205561238e565b600183600981111561205f57fe5b14156120ad5761208f437f0000000000000000000000000000000000000000000000000000000000000000612d98565b6001600160a01b0383166000908152600a602052604090205561238e565b60028360098111156120bb57fe5b1415612109576120eb437f0000000000000000000000000000000000000000000000000000000000000000612d98565b6001600160a01b03831660009081526004602052604090205561238e565b600383600981111561211757fe5b14156121705761215261214b7f00000000000000000000000000000000000000000000000000000000000000006002612df2565b4390612d98565b6001600160a01b03831660009081526014602052604090205561238e565b600483600981111561217e57fe5b14156121cc576121ae437f0000000000000000000000000000000000000000000000000000000000000000612d98565b6001600160a01b03831660009081526010602052604090205561238e565b60058360098111156121da57fe5b14156122285761220a437f0000000000000000000000000000000000000000000000000000000000000000612d98565b6001600160a01b0383166000908152600d602052604090205561238e565b600683600981111561223657fe5b14156122885761226a61214b7f00000000000000000000000000000000000000000000000000000000000000006002612df2565b6001600160a01b03831660009081526017602052604090205561238e565b600783600981111561229657fe5b14156122e4576122c6437f0000000000000000000000000000000000000000000000000000000000000000612d98565b6001600160a01b0383166000908152601a602052604090205561238e565b60088360098111156122f257fe5b141561234057612322437f0000000000000000000000000000000000000000000000000000000000000000612d98565b6001600160a01b0383166000908152601e602052604090205561238e565b600983600981111561234e57fe5b14156123865761237e437f0000000000000000000000000000000000000000000000000000000000000000612d98565b60205561238e565b5060006114ea565b82600981111561239a57fe5b604080516001600160a01b038516815290517f0e4f2c4b5bc209d509bc3d49348c787fefadc66a79351b470599ac0f5be52eaf9181900360200190a250600192915050565b60136020526000908152604090205460ff1681565b60196020526000908152604090205460ff1681565b601e6020526000908152604090205481565b600080546001600160a01b03163314612469576040805162461bcd60e51b815260206004820181905260248201526000805160206133c8833981519152604482015290519081900360640190fd5b6001600160a01b03831661247c57600080fd5b60008085600981111561248b57fe5b14156125475761249e6007600686612eed565b15612517576001600160a01b0384166000908152600760205260408120556124c7600585612fd7565b61251757600580546001810182556000919091527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db00180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152600660205260409020805460ff81161560ff199091168117909155612c79565b600185600981111561255557fe5b141561261157612568600a600986612eed565b156125e1576001600160a01b0384166000908152600a6020526040812055612591600885612fd7565b6125e157600880546001810182556000919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152600960205260409020805460ff81161560ff199091168117909155612c79565b600285600981111561261f57fe5b14156126db576126326004600386612eed565b156126ab576001600160a01b03841660009081526004602052604081205561265b600285612fd7565b6126ab57600280546001810182556000919091527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152600360205260409020805460ff81161560ff199091168117909155612c79565b60038560098111156126e957fe5b14156127e2576126fc6014601386612eed565b156127b257601280546001810182557fbb8a6a4669ba250d26cd7a459eca9d215f8307e33aebe50379bc5a3617ec34440180546001600160a01b0319166001600160a01b0387169081179091556000908152601460205260408120556127629085612fd7565b6127b257601280546001810182556000919091527fbb8a6a4669ba250d26cd7a459eca9d215f8307e33aebe50379bc5a3617ec34440180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152601360205260409020805460ff81161560ff199091168117909155612c79565b60048560098111156127f057fe5b14156128e9576128036010600f86612eed565b156128b957600e80546001810182557fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fd0180546001600160a01b0319166001600160a01b0387169081179091556000908152601060205260408120556128699085612fd7565b6128b957600e80546001810182556000919091527fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fd0180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152600f60205260409020805460ff81161560ff199091168117909155612c79565b60058560098111156128f757fe5b14156129d55761290a600d600c86612eed565b15612983576001600160a01b0384166000908152600d6020526040812055612933600b85612fd7565b61298357600b80546001810182556000919091527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b038381166000908152600c60209081526040808320805460ff81161560ff199091168117909155601190925290912080546001600160a01b03191692851692909217909155612c79565b60068560098111156129e357fe5b1415612a9f576129f66017601686612eed565b15612a6f576001600160a01b038416600090815260176020526040812055612a1f601585612fd7565b612a6f57601580546001810182556000919091527f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec4750180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152601660205260409020805460ff81161560ff199091168117909155612c79565b6007856009811115612aad57fe5b1415612b6957612ac0601a601986612eed565b15612b39576001600160a01b0384166000908152601a6020526040812055612ae9601885612fd7565b612b3957601880546001810182556000919091527fb13d2d76d1f4b7be834882e410b3e3a8afaf69f83600ae24db354391d2378d2e0180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152601960205260409020805460ff81161560ff199091168117909155612c79565b6008856009811115612b7757fe5b1415612c3357612b8a601e601d86612eed565b15612c03576001600160a01b0384166000908152601e6020526040812055612bb3601c85612fd7565b612c0357601c80546001810182556000919091527f0e4562a10381dec21b205ed72637e6b1b523bdd0e4d4d50af5cd23dd4500a2110180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152601d60205260409020805460ff81161560ff199091168117909155612c79565b6009856009811115612c4157fe5b1415612c6f57506000602055601f80546001600160a01b0319166001600160a01b0385161790556001612c79565b6000915050612cd0565b846009811115612c8557fe5b604080516001600160a01b0387168152831515602082015281517f0dcacb7e392f3d6a216ed2660e3dcfd40b7793d33591db2ba185a6b8e44fc477929181900390910190a260019150505b9392505050565b60225481565b600b8181548110610b5857600080fd5b60106020526000908152604090205481565b6000612cd083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613027565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052612d939084906130be565b505050565b600082820183811015612cd0576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600082612e01575060006114ea565b82820282848281612e0e57fe5b0414612cd05760405162461bcd60e51b81526004018080602001828103825260218152602001806133a76021913960400191505060405180910390fd5b6000612cd083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061316f565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052612ee79085906130be565b50505050565b6001600160a01b03811660009081526020839052604081205460ff16612fcd576001600160a01b038216600090815260208590526040902054612f64576040805162461bcd60e51b815260206004820152600a6024820152694d75737420717565756560b01b604482015290519081900360640190fd5b6001600160a01b038216600090815260208590526040902054431015612fc5576040805162461bcd60e51b8152602060048201526011602482015270145d595d59481b9bdd08195e1c1a5c9959607a1b604482015290519081900360640190fd5b506001612cd0565b5060009392505050565b6000805b8354811015612fcd57826001600160a01b0316848281548110612ffa57fe5b6000918252602090912001546001600160a01b0316141561301f5760019150506114ea565b600101612fdb565b600081848411156130b65760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561307b578181015183820152602001613063565b50505050905090810190601f1680156130a85780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6060613113826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166131d49092919063ffffffff16565b805190915015612d935780806020019051602081101561313257600080fd5b5051612d935760405162461bcd60e51b815260040180806020018281038252602a815260200180613408602a913960400191505060405180910390fd5b600081836131be5760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561307b578181015183820152602001613063565b5060008385816131ca57fe5b0495945050505050565b60606131e384846000856131eb565b949350505050565b60606131f685613358565b613247576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b602083106132865780518252601f199092019160209182019101613267565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146132e8576040519150601f19603f3d011682016040523d82523d6000602084013e6132ed565b606091505b509150915081156133015791506131e39050565b8051156133115780518082602001fd5b60405162461bcd60e51b815260206004820181815286516024840152865187939192839260440191908501908083836000831561307b578181015183820152602001613063565b3b15159056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734f776e61626c653a206d757374206265206e6577206f776e657220746f2070756c6c536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657293bb8edd35984706eee1b92541281f7f62d33c01c5b2ec0929a113603bd21d665361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a264697066735822122054a6f27ef5b8917fe056573daf7f01c0a76ef2058429267fba261bc457ba439364736f6c63430007050033000000000000000000000000b8ef3a190b68175000b74b4160d325fd5024760e000000000000000000000000d586e7f844cea2f87f50152665bcbc2c279d8d70000000000000000000000000130966628846bfd36ff31a822705796e8cb8c18d000000000000000000000000c0123c360f000338ce3b54b600697f3584054bc10000000000000000000000000000000000000000000000000000000000000000

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

000000000000000000000000b8ef3a190b68175000b74b4160d325fd5024760e000000000000000000000000d586e7f844cea2f87f50152665bcbc2c279d8d70000000000000000000000000130966628846bfd36ff31a822705796e8cb8c18d000000000000000000000000c0123c360f000338ce3b54b600697f3584054bc10000000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _RUG (address): 0xb8ef3a190b68175000b74b4160d325fd5024760e
Arg [1] : _DAI (address): 0xd586e7f844cea2f87f50152665bcbc2c279d8d70
Arg [2] : _MIM (address): 0x130966628846bfd36ff31a822705796e8cb8c18d
Arg [3] : _RUGDAI (address): 0xc0123c360f000338ce3b54b600697f3584054bc1
Arg [4] : _blocksNeededForQueue (uint256): 0

-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 000000000000000000000000b8ef3a190b68175000b74b4160d325fd5024760e
Arg [1] : 000000000000000000000000d586e7f844cea2f87f50152665bcbc2c279d8d70
Arg [2] : 000000000000000000000000130966628846bfd36ff31a822705796e8cb8c18d
Arg [3] : 000000000000000000000000c0123c360f000338ce3b54b600697f3584054bc1
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000000


Deployed ByteCode Sourcemap

6752:19311:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12142:581;;;;;;;;;;;;;;;;-1:-1:-1;12142:581:0;;;;;;-1:-1:-1;;;;;12142:581:0;;:::i;:::-;;9185:32;;;;;;;;;;;;;;;;-1:-1:-1;9185:32:0;;:::i;:::-;;;;-1:-1:-1;;;;;9185:32:0;;;;;;;;;;;;;;4143:159;;;:::i;9897:47::-;;;;;;;;;;;;;;;;-1:-1:-1;9897:47:0;-1:-1:-1;;;;;9897:47:0;;:::i;:::-;;;;;;;;;;;;;;;;15177:626;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;15177:626:0;;;;;;;;:::i;16336:146::-;;;:::i;14656:376::-;;;;;;;;;;;;;;;;-1:-1:-1;14656:376:0;;:::i;8207:52::-;;;;;;;;;;;;;;;;-1:-1:-1;8207:52:0;-1:-1:-1;;;;;8207:52:0;;:::i;:::-;;;;;;;;;;;;;;;;;;12868:859;;;;;;;;;;;;;;;;-1:-1:-1;12868:859:0;;;;;;-1:-1:-1;;;;;12868:859:0;;:::i;10194:19::-;;;:::i;9086:51::-;;;;;;;;;;;;;;;;-1:-1:-1;9086:51:0;-1:-1:-1;;;;;9086:51:0;;:::i;17466:458::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;17466:458:0;;;;;;;;:::i;10220:21::-;;;:::i;16635:668::-;;;:::i;8360:32::-;;;;;;;;;;;;;;;;-1:-1:-1;8360:32:0;;:::i;4310:261::-;;;;;;;;;;;;;;;;-1:-1:-1;4310:261:0;-1:-1:-1;;;;;4310:261:0;;:::i;3916:90::-;;;:::i;10047:49::-;;;;;;;;;;;;;;;;-1:-1:-1;10047:49:0;-1:-1:-1;;;;;10047:49:0;;:::i;4583:221::-;;;:::i;7965:48::-;;;;;;;;;;;;;;;;-1:-1:-1;7965:48:0;-1:-1:-1;;;;;7965:48:0;;:::i;15884:343::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;15884:343:0;;;;;;;;:::i;8110:34::-;;;;;;;;;;;;;;;;-1:-1:-1;8110:34:0;;:::i;9429:::-;;;;;;;;;;;;;;;;-1:-1:-1;9429:34:0;;:::i;8020:51::-;;;;;;;;;;;;;;;;-1:-1:-1;8020:51:0;-1:-1:-1;;;;;8020:51:0;;:::i;9679:24::-;;;;;;;;;;;;;;;;-1:-1:-1;9679:24:0;;:::i;8455:50::-;;;;;;;;;;;;;;;;-1:-1:-1;8455:50:0;-1:-1:-1;;;;;8455:50:0;;:::i;8738:53::-;;;;;;;;;;;;;;;;-1:-1:-1;8738:53:0;-1:-1:-1;;;;;8738:53:0;;:::i;8830:36::-;;;;;;;;;;;;;;;;-1:-1:-1;8830:36:0;;:::i;10287:25::-;;;:::i;8266:55::-;;;;;;;;;;;;;;;;-1:-1:-1;8266:55:0;-1:-1:-1;;;;;8266:55:0;;:::i;8929:54::-;;;;;;;;;;;;;;;;-1:-1:-1;8929:54:0;-1:-1:-1;;;;;8929:54:0;;:::i;8681:50::-;;;;;;;;;;;;;;;;-1:-1:-1;8681:50:0;-1:-1:-1;;;;;8681:50:0;;:::i;9585:55::-;;;;;;;;;;;;;;;;-1:-1:-1;9585:55:0;-1:-1:-1;;;;;9585:55:0;;:::i;9337:53::-;;;;;;;;;;;;;;;;-1:-1:-1;9337:53:0;-1:-1:-1;;;;;9337:53:0;;:::i;9953:31::-;;;;;;;;;;;;;;;;-1:-1:-1;9953:31:0;;:::i;11116:875::-;;;;;;;;;;;;;;;;-1:-1:-1;11116:875:0;;;-1:-1:-1;;;;;11116:875:0;;;;;;;;;;:::i;8512:53::-;;;;;;;;;;;;;;;;-1:-1:-1;8512:53:0;-1:-1:-1;;;;;8512:53:0;;:::i;9815:45::-;;;;;;;;;;;;;;;;-1:-1:-1;9815:45:0;-1:-1:-1;;;;;9815:45:0;;:::i;7890:30::-;;;;;;;;;;;;;;;;-1:-1:-1;7890:30:0;;:::i;7839:42::-;;;:::i;13894:631::-;;;;;;;;;;;;;;;;-1:-1:-1;13894:631:0;;;;;;-1:-1:-1;;;;;13894:631:0;;:::i;9526:52::-;;;;;;;;;;;;;;;;-1:-1:-1;9526:52:0;-1:-1:-1;;;;;9526:52:0;;:::i;7804:28::-;;;:::i;18100:1785::-;;;;;;;;;;;;;;;;-1:-1:-1;18100:1785:0;;;;;;;;-1:-1:-1;;;;;18100:1785:0;;:::i;9280:50::-;;;;;;;;;;;;;;;;-1:-1:-1;9280:50:0;-1:-1:-1;;;;;9280:50:0;;:::i;9766:42::-;;;;;;;;;;;;;;;;-1:-1:-1;9766:42:0;-1:-1:-1;;;;;9766:42:0;;:::i;10103:52::-;;;;;;;;;;;;;;;;-1:-1:-1;10103:52:0;-1:-1:-1;;;;;10103:52:0;;:::i;20095:4833::-;;;;;;;;;;;;;;;;-1:-1:-1;20095:4833:0;;;;;-1:-1:-1;;;;;20095:4833:0;;;;;;;;;;;;:::i;10352:21::-;;;:::i;8604:32::-;;;;;;;;;;;;;;;;-1:-1:-1;8604:32:0;;:::i;8990:57::-;;;;;;;;;;;;;;;;-1:-1:-1;8990:57:0;-1:-1:-1;;;;;8990:57:0;;:::i;12142:581::-;-1:-1:-1;;;;;12221:24:0;;;;;;:14;:24;;;;;;;;12212:51;;;;;-1:-1:-1;;;12212:51:0;;;;;;;;;;;;-1:-1:-1;;;12212:51:0;;;;;;;;;;;;;;;12346:10;12328:30;;;;:16;:30;;;;;;;;:38;;:30;:38;12319:65;;;;;-1:-1:-1;;;12319:65:0;;;;;;;;;;;;-1:-1:-1;;;12319:65:0;;;;;;;;;;;;;;;12397:10;12410:26;12419:6;12427:7;12410;:26::i;:::-;12397:39;;12458:3;-1:-1:-1;;;;;12447:25:0;;12474:10;12486:5;12447:46;;;;;;;;;;;;;-1:-1:-1;;;;;12447:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;12522:13:0;;:26;;-1:-1:-1;12522:13:0;-1:-1:-1;12541:5:0;12522:17;:26::i;:::-;12506:13;:42;;;12564:32;;-1:-1:-1;;;;;;;;;;;12564:32:0;;;;12609:52;-1:-1:-1;;;;;12609:29:0;;12640:10;12652:7;12609:29;:52::i;:::-;12679:36;;;;;;;;;;;;;;-1:-1:-1;;;;;12679:36:0;;;;;;;;;;;12142:581;;;:::o;9185:32::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9185:32:0;;-1:-1:-1;9185:32:0;:::o;4143:159::-;4057:6;;-1:-1:-1;;;;;4057:6:0;4067:10;4057:20;4048:67;;;;;-1:-1:-1;;;4048:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;4048:67:0;;;;;;;;;;;;;;;4260:1:::1;4244:6:::0;;4227:37:::1;::::0;-1:-1:-1;;;;;4244:6:0;;::::1;::::0;4227:37:::1;::::0;4260:1;;4227:37:::1;4292:1;4275:19:::0;;-1:-1:-1;;;;;;4275:19:0::1;::::0;;4143:159::o;9897:47::-;;;;;;;;;;;;;:::o;15177:626::-;-1:-1:-1;;;;;15249:26:0;;;;;;:16;:26;;;;;;;;15245:209;;;15322:10;15302:32;;;;:18;:32;;;;;;;;15293:59;;;;;-1:-1:-1;;;15293:59:0;;;;;;;;;;;;-1:-1:-1;;;15293:59:0;;;;;;;;;;;;;;;15245:209;;;15412:10;15394:30;;;;:16;:30;;;;;;;;15385:57;;;;;-1:-1:-1;;;15385:57:0;;;;;;;;;;;;-1:-1:-1;;;15385:57:0;;;;;;;;;;;;;;;15466:10;15479:24;15487:6;15495:7;15479;:24::i;:::-;15466:37;;15532:16;:14;:16::i;:::-;15523:5;:25;;15514:61;;;;;-1:-1:-1;;;15514:61:0;;;;;;;;;;;;-1:-1:-1;;;15514:61:0;;;;;;;;;;;;;;;15604:13;;:26;;15623:5;15604:17;:26::i;:::-;15588:13;:42;;;15646:32;;-1:-1:-1;;;;;;;;;;;15646:32:0;;;;15691:52;-1:-1:-1;;;;;15691:29:0;;15722:10;15734:7;15691:29;:52::i;:::-;15761:34;;;;;;;;-1:-1:-1;;;;;15761:34:0;;;;;;;;;;;;;15177:626;;;:::o;16336:146::-;16384:4;16409:65;16428:44;16461:9;;16436:3;-1:-1:-1;;;;;16428:25:0;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16428:27:0;;:31;:44::i;:::-;16409:13;;;:17;:65::i;:::-;16402:72;;16336:146;:::o;14656:376::-;14737:10;14727:22;;;;:8;:22;;;;;;;;14718:49;;;;;-1:-1:-1;;;14718:49:0;;;;;;;;;;;;-1:-1:-1;;;14718:49:0;;;;;;;;;;;;;;;14780:48;;;-1:-1:-1;;;14780:48:0;;14807:10;14780:48;;;;;;;;;;;;-1:-1:-1;;;;;14791:3:0;14780:25;;;;:48;;;;;-1:-1:-1;;14780:48:0;;;;;;;-1:-1:-1;14780:25:0;:48;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;14886:10:0;14871:27;;;;:13;:27;;;;;;:42;;-1:-1:-1;14871:27:0;-1:-1:-1;14904:7:0;14871:31;:42::i;:::-;14856:10;14841:27;;;;:13;:27;;;;;:72;14936:9;;:24;;14951:7;14936:13;:24::i;:::-;14924:9;:36;14978:46;;;;;;;;;;;;;;-1:-1:-1;;;;;15001:3:0;14978:46;;14989:10;;14978:46;;;;;;;;;;;14656:376;:::o;8207:52::-;;;;;;;;;;;;;;;:::o;12868:859::-;12958:10;12948:22;;;;:8;:22;;;;;;;;12939:49;;;;;-1:-1:-1;;;12939:49:0;;;;;;;;;;;;-1:-1:-1;;;12939:49:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;13008:24:0;;;;;;:14;:24;;;;;;;;12999:51;;;;;-1:-1:-1;;;12999:51:0;;;;;;;;;;;;-1:-1:-1;;;12999:51:0;;;;;;;;;;;;;;;13063:10;13076:26;13085:6;13093:7;13076;:26::i;:::-;13142:4;;13134:38;;;-1:-1:-1;;;13134:38:0;;13160:10;13134:38;;;;;;13063:39;;-1:-1:-1;13115:16:0;;-1:-1:-1;;;;;13142:4:0;;;;13134:24;;:38;;;;;;;;;;;;;;;13142:4;13134:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13134:38:0;13273:10;13220:18;13258:27;;;:13;13134:38;13258:27;;;;;13134:38;;-1:-1:-1;13220:18:0;13241:46;;13134:38;;13241:15;:46::i;:::-;13220:67;;13316:13;13307:5;:22;;13298:55;;;;;-1:-1:-1;;;13298:55:0;;;;;;;;;;;;-1:-1:-1;;;13298:55:0;;;;;;;;;;;;;;;13411:10;13396:27;;;;:13;:27;;;;;;:40;;13429:5;13396:31;:40::i;:::-;13381:10;13366:27;;;;:13;:27;;;;;:70;13459:9;;:22;;13474:5;13459:13;:22::i;:::-;13447:9;:34;13510:13;;:26;;13529:5;13510:17;:26::i;:::-;13494:13;:42;;;13552:32;;-1:-1:-1;;;;;;;;;;;13552:32:0;;;;13597:48;;;-1:-1:-1;;;13597:48:0;;13624:10;13597:48;;;;;;;;;;;;-1:-1:-1;;;;;13597:25:0;;;;;:48;;;;;;;;;;;;;;-1:-1:-1;13597:25:0;:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;13671:48:0;;;;;;13597;13671;;;;;;;-1:-1:-1;;;;;13671:48:0;;;13683:10;;13671:48;;;;;;;;;;;12868:859;;;;;:::o;10194:19::-;;;-1:-1:-1;;;;;10194:19:0;;:::o;9086:51::-;;;;;;;;;;;;-1:-1:-1;;;;;9086:51:0;;:::o;17466:458::-;-1:-1:-1;;;;;17567:24:0;;17537:11;17567:24;;;:14;:24;;;;;;;;17562:355;;;17671:86;17736:6;-1:-1:-1;;;;;17728:25:0;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17728:27:0;17690:24;;;-1:-1:-1;;;17690:24:0;;;;17722:33;;;;:2;:33;;17671:45;;-1:-1:-1;;;;;17698:3:0;17690:22;;;;:24;;;;;17728:27;;17690:24;;;;;;;;:22;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17690:24:0;17671:7;;17684:30;;:2;:30;17671:11;:45::i;:::-;:49;;:86::i;:::-;17662:95;;17562:355;;;-1:-1:-1;;;;;17780:26:0;;;;;;:16;:26;;;;;;;;17775:142;;;-1:-1:-1;;;;;17850:24:0;;;;;;;:14;:24;;;;;;;;;;17833:72;;-1:-1:-1;;;17833:72:0;;;;;;;;;;;;;;;;;17850:24;;;;;17833:53;;:72;;;;;;;;;;;17850:24;17833:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17833:72:0;;-1:-1:-1;17775:142:0;17466:458;;;;:::o;10220:21::-;;;;:::o;16635:668::-;4057:6;;-1:-1:-1;;;;;4057:6:0;4067:10;4057:20;4048:67;;;;;-1:-1:-1;;;4048:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;4048:67:0;;;;;;;;;;;;;;;16694:13:::1;::::0;16718:221:::1;16739:13;:20:::0;16735:24;::::1;16718:221;;;16793:134;16826:86;16835:13;16850:1;16835:18;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;16863:13:::1;:18:::0;;-1:-1:-1;;;;;16835:18:0;;::::1;::::0;16878:1;;16863:18;::::1;;;;;;::::0;;;::::1;::::0;;;;::::1;::::0;16855:55:::1;::::0;;-1:-1:-1;;;16855:55:0;;16903:4:::1;16855:55;::::0;::::1;::::0;;;-1:-1:-1;;;;;16863:18:0;;::::1;::::0;16855:38:::1;::::0;:55;;;;;;;;;;16863:18;16855:55;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;16855:55:0;16826:7:::1;:86::i;:::-;16793:8:::0;;:12:::1;:134::i;:::-;16782:145:::0;-1:-1:-1;16761:3:0::1;;16718:221;;;;16954:6;16949:226;16970:15;:22:::0;16966:26;::::1;16949:226;;;17026:137;17058:90;17067:15;17084:1;17067:20;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;17097:15:::1;:20:::0;;-1:-1:-1;;;;;17067:20:0;;::::1;::::0;17114:1;;17097:20;::::1;;;;17026:137;17015:148:::0;-1:-1:-1;16994:3:0::1;;16949:226;;;-1:-1:-1::0;17185:13:0::1;:24:::0;;;17225:27:::1;::::0;17201:8;;-1:-1:-1;;;;;;;;;;;17225:27:0;;;::::1;17268;::::0;17285:8;;17268:27:::1;::::0;;;::::1;4126:1;16635:668::o:0;8360:32::-;;;;;;;;;;;;4310:261;4057:6;;-1:-1:-1;;;;;4057:6:0;4067:10;4057:20;4048:67;;;;;-1:-1:-1;;;4048:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;4048:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;4413:23:0;::::1;4404:75;;;;-1:-1:-1::0;;;4404:75:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4512:6;::::0;;4495:36:::1;::::0;-1:-1:-1;;;;;4495:36:0;;::::1;::::0;4512:6;::::1;::::0;4495:36:::1;::::0;::::1;4542:9;:21:::0;;-1:-1:-1;;;;;;4542:21:0::1;-1:-1:-1::0;;;;;4542:21:0;;;::::1;::::0;;;::::1;::::0;;4310:261::o;3916:90::-;3965:7;3992:6;-1:-1:-1;;;;;3992:6:0;3916:90;:::o;10047:49::-;;;;;;;;;;;;;;;:::o;4583:221::-;4667:9;;-1:-1:-1;;;;;4667:9:0;4653:10;:23;4644:71;;;;-1:-1:-1;;;4644:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4756:9;;;4748:6;;4731:36;;-1:-1:-1;;;;;4756:9:0;;;;4748:6;;;;4731:36;;;4787:9;;;4778:18;;-1:-1:-1;;;;;;4778:18:0;-1:-1:-1;;;;;4787:9:0;;;4778:18;;;;;;4583:221::o;7965:48::-;;;;;;;;;;;;;;;:::o;15884:343::-;15987:10;15970:29;;;;:15;:29;;;;;;;;15961:56;;;;;-1:-1:-1;;;15961:56:0;;;;;;;;;;;;-1:-1:-1;;;15961:56:0;;;;;;;;;;;;;;;16048:16;:14;:16::i;:::-;16037:7;:27;;16028:63;;;;;-1:-1:-1;;;16028:63:0;;;;;;;;;;;;-1:-1:-1;;;16028:63:0;;;;;;;;;;;;;;;16120:3;-1:-1:-1;;;;;16104:26:0;;16132:10;16144:7;16104:49;;;;;;;;;;;;;-1:-1:-1;;;;;16104:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;16171:48:0;;;;;;;;-1:-1:-1;;;;;16171:48:0;;;-1:-1:-1;16186:10:0;;-1:-1:-1;16171:48:0;;;;;;;;;15884:343;;:::o;8110:34::-;;;;;;;;;;;;9429;;;;;;;;;;;;8020:51;;;;;;;;;;;;;:::o;9679:24::-;;;;;;;;;;;;8455:50;;;;;;;;;;;;;;;:::o;8738:53::-;;;;;;;;;;;;;:::o;8830:36::-;;;;;;;;;;;;10287:25;;;;:::o;8266:55::-;;;;;;;;;;;;;:::o;8929:54::-;;;;;;;;;;;;;;;:::o;8681:50::-;;;;;;;;;;;;;;;:::o;9585:55::-;;;;;;;;;;;;;:::o;9337:53::-;;;;;;;;;;;;;:::o;9953:31::-;;;;;;;;;;;;11116:875;-1:-1:-1;;;;;11231:24:0;;11198:10;11231:24;;;:14;:24;;;;;;;;;:54;;-1:-1:-1;;;;;;11259:26:0;;;;;;:16;:26;;;;;;;;11231:54;11222:81;;;;;-1:-1:-1;;;11222:81:0;;;;;;;;;;;;-1:-1:-1;;;11222:81:0;;;;;;;;;;;;;;;11314:71;-1:-1:-1;;;;;11314:33:0;;11349:10;11369:4;11376:7;11314:33;:71::i;:::-;-1:-1:-1;;;;;11403:24:0;;;;;;:14;:24;;;;;;;;11398:212;;;11474:10;11454:32;;;;:18;:32;;;;;;;;11445:59;;;;;-1:-1:-1;;;11445:59:0;;;;;;;;;;;;-1:-1:-1;;;11445:59:0;;;;;;;;;;;;;;;11398:212;;;11568:10;11546:34;;;;:20;:34;;;;;;;;11537:61;;;;;-1:-1:-1;;;11537:61:0;;;;;;;;;;;;-1:-1:-1;;;11537:61:0;;;;;;;;;;;;;;;11622:10;11635:24;11643:6;11651:7;11635;:24::i;:::-;11622:37;-1:-1:-1;11751:20:0;11622:37;11762:7;11751:9;:20::i;:::-;11743:28;;11798:3;-1:-1:-1;;;;;11782:26:0;;11810:10;11822:5;11782:47;;;;;;;;;;;;;-1:-1:-1;;;;;11782:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;11858:13:0;;:26;;-1:-1:-1;11858:13:0;-1:-1:-1;11877:5:0;11858:17;:26::i;:::-;11842:13;:42;;;11900:32;;-1:-1:-1;;;;;;;;;;;11900:32:0;;;;11950:33;;;;;;;;;;;;;;-1:-1:-1;;;;;11950:33:0;;;;;;;;;;;11116:875;;;;;;:::o;8512:53::-;;;;;;;;;;;;;:::o;9815:45::-;;;;;;;;;;;;;:::o;7890:30::-;;;;;;;;;;;;7839:42;;;:::o;13894:631::-;13995:10;13985:22;;;;:8;:22;;;;;;;;13976:49;;;;;-1:-1:-1;;;13976:49:0;;;;;;;;;;;;-1:-1:-1;;;13976:49:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;14045:24:0;;;;;;:14;:24;;;;;;;;14036:51;;;;;-1:-1:-1;;;14036:51:0;;;;;;;;;;;;-1:-1:-1;;;14036:51:0;;;;;;;;;;;;;;;14100:71;-1:-1:-1;;;;;14100:33:0;;14135:10;14155:4;14162:7;14100:33;:71::i;:::-;14184:10;14197:26;14206:6;14214:7;14197;:26::i;:::-;14279:10;14264:27;;;;:13;:27;;;;;;14184:39;;-1:-1:-1;14264:40:0;;14184:39;14264:31;:40::i;:::-;14249:10;14234:27;;;;:13;:27;;;;;:70;14327:9;;:22;;14342:5;14327:13;:22::i;:::-;14315:9;:34;14378:13;;:26;;14397:5;14378:17;:26::i;:::-;14362:13;:42;;;14420:32;;-1:-1:-1;;;;;;;;;;;14420:32:0;;;;14470:47;;;;;;;;;;;;;;-1:-1:-1;;;;;14470:47:0;;;14481:10;;14470:47;;;;;;;;;;;13894:631;;;:::o;9526:52::-;;;;;;;;;;;;;;;:::o;7804:28::-;;;:::o;18100:1785::-;18188:4;4057:6;;-1:-1:-1;;;;;4057:6:0;4067:10;4057:20;4048:67;;;;;-1:-1:-1;;;4048:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;4048:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;18215:22:0;::::1;18206:33;;;::::0;::::1;;18268:25;18255:9;:38;;;;;;;;;18250:1552;;;18352:40;:12;18370:20;18352:16;:40::i;:::-;-1:-1:-1::0;;;;;18316:33:0;::::1;;::::0;;;:21:::1;:33;::::0;;;;:76;18250:1552:::1;;;18428:23;18415:9;:36;;;;;;;;;18410:1392;;;18508:40;:12;18526:20;18508:16;:40::i;:::-;-1:-1:-1::0;;;;;18474:31:0;::::1;;::::0;;;:19:::1;:31;::::0;;;;:74;18410:1392:::1;;;18584:21;18571:9;:34;;;;;;;;;18566:1236;;;18660:40;:12;18678:20;18660:16;:40::i;:::-;-1:-1:-1::0;;;;;18628:29:0;::::1;;::::0;;;:17:::1;:29;::::0;;;;:72;18566:1236:::1;;;18736:23;18723:9;:36;;;;;;;;;18718:1084;;;18816:49;18834:29;:20;18860:1;18834:24;:29::i;:::-;18816:12;::::0;:16:::1;:49::i;:::-;-1:-1:-1::0;;;;;18782:31:0;::::1;;::::0;;;:19:::1;:31;::::0;;;;:83;18718:1084:::1;;;18901:27;18888:9;:40;;;;;;;;;18883:919;;;18989:40;:12;19007:20;18989:16;:40::i;:::-;-1:-1:-1::0;;;;;18951:35:0;::::1;;::::0;;;:23:::1;:35;::::0;;;;:78;18883:919:::1;;;19065:23;19052:9;:36;;;;;;;;;19047:755;;;19145:40;:12;19163:20;19145:16;:40::i;:::-;-1:-1:-1::0;;;;;19111:31:0;::::1;;::::0;;;:19:::1;:31;::::0;;;;:74;19047:755:::1;;;19221:25;19208:9;:38;;;;;;;;;19203:599;;;19305:49;19323:29;:20;19349:1;19323:24;:29::i;19305:49::-;-1:-1:-1::0;;;;;19269:33:0;::::1;;::::0;;;:21:::1;:33;::::0;;;;:85;19203:599:::1;;;19390:15;19377:9;:28;;;;;;;;;19372:430;;;19454:40;:12;19472:20;19454:16;:40::i;:::-;-1:-1:-1::0;;;;;19428:23:0;::::1;;::::0;;;:11:::1;:23;::::0;;;;:66;19372:430:::1;;;19530:22;19517:9;:35;;;;;;;;;19512:290;;;19608:40;:12;19626:20;19608:16;:40::i;:::-;-1:-1:-1::0;;;;;19575:30:0;::::1;;::::0;;;:18:::1;:30;::::0;;;;:73;19512:290:::1;;;19684:13;19671:9;:26;;;;;;;;;19666:136;;;19732:40;:12;19750:20;19732:16;:40::i;:::-;19720:9;:52:::0;19666:136:::1;;;-1:-1:-1::0;19797:5:0::1;19790:12;;19666:136;19834:9;19820:35;;;;;;;;;::::0;;-1:-1:-1;;;;;19820:35:0;::::1;::::0;;;;::::1;::::0;;;;::::1;::::0;;::::1;-1:-1:-1::0;19873:4:0::1;18100:1785:::0;;;;:::o;9280:50::-;;;;;;;;;;;;;;;:::o;9766:42::-;;;;;;;;;;;;;;;:::o;10103:52::-;;;;;;;;;;;;;:::o;20095:4833::-;20205:4;4057:6;;-1:-1:-1;;;;;4057:6:0;4067:10;4057:20;4048:67;;;;;-1:-1:-1;;;4048:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;4048:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;20232:22:0;::::1;20223:33;;;::::0;::::1;;20267:11;::::0;20294:9:::1;:38;;;;;;;;;20289:4545;;;20360:67;20374:21;20397:18;20417:8;20360:12;:67::i;:::-;20355:293;;;-1:-1:-1::0;;;;;20449:33:0;::::1;20485:1;20449:33:::0;;;:21:::1;:33;::::0;;;;:37;20510:43:::1;20524:17;20472:8:::0;20510:12:::1;:43::i;:::-;20505:128;;20579:17;:34:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;20579:34:0;;;;;::::1;::::0;;-1:-1:-1;;;;;;20579:34:0::1;-1:-1:-1::0;;;;;20579:34:0;::::1;;::::0;;20505:128:::1;-1:-1:-1::0;;;;;;20672:30:0;::::1;;::::0;;;:18:::1;:30;::::0;;;;;;::::1;::::0;::::1;20671:31;-1:-1:-1::0;;20717:39:0;;::::1;::::0;::::1;::::0;;;20289:4545:::1;;;20806:23;20793:9;:36;;;;;;;;;20788:4046;;;20857:63;20871:19;20892:16;20910:8;20857:12;:63::i;:::-;20852:283;;;-1:-1:-1::0;;;;;20942:31:0;::::1;20976:1;20942:31:::0;;;:19:::1;:31;::::0;;;;:35;21001:41:::1;21015:15;20963:8:::0;21001:12:::1;:41::i;:::-;20996:124;;21068:15;:32:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;21068:32:0;;;;;::::1;::::0;;-1:-1:-1;;;;;;21068:32:0::1;-1:-1:-1::0;;;;;21068:32:0;::::1;;::::0;;20996:124:::1;-1:-1:-1::0;;;;;;21159:28:0;::::1;;::::0;;;:16:::1;:28;::::0;;;;;;::::1;::::0;::::1;21158:29;-1:-1:-1::0;;21202:37:0;;::::1;::::0;::::1;::::0;;;20788:4046:::1;;;21277:21;21264:9;:34;;;;;;;;;21259:3575;;;21326:59;21340:17;21359:14;21375:8;21326:12;:59::i;:::-;21321:273;;;-1:-1:-1::0;;;;;21407:29:0;::::1;21439:1;21407:29:::0;;;:17:::1;:29;::::0;;;;:33;21464:39:::1;21478:13;21426:8:::0;21464:12:::1;:39::i;:::-;21459:120;;21529:13;:30:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;21529:30:0;;;;;::::1;::::0;;-1:-1:-1;;;;;;21529:30:0::1;-1:-1:-1::0;;;;;21529:30:0;::::1;;::::0;;21459:120:::1;-1:-1:-1::0;;;;;;21618:26:0;::::1;;::::0;;;:14:::1;:26;::::0;;;;;;::::1;::::0;::::1;21617:27;-1:-1:-1::0;;21659:35:0;;::::1;::::0;::::1;::::0;;;21259:3575:::1;;;21732:23;21719:9;:36;;;;;;;;;21714:3120;;;21783:63;21797:19;21818:16;21836:8;21783:12;:63::i;:::-;21778:334;;;21868:15;:32:::0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;;;;21868:32:0::1;-1:-1:-1::0;;;;;21868:32:0;::::1;::::0;;::::1;::::0;;;-1:-1:-1;21919:31:0;;;:19:::1;21868:32;21919:31:::0;;;;:35;21978:41:::1;::::0;21868:32;21978:12:::1;:41::i;:::-;21973:124;;22045:15;:32:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;22045:32:0;;;;;::::1;::::0;;-1:-1:-1;;;;;;22045:32:0::1;-1:-1:-1::0;;;;;22045:32:0;::::1;;::::0;;21973:124:::1;-1:-1:-1::0;;;;;;22136:28:0;::::1;;::::0;;;:16:::1;:28;::::0;;;;;;::::1;::::0;::::1;22135:29;-1:-1:-1::0;;22179:37:0;;::::1;::::0;::::1;::::0;;;21714:3120:::1;;;22254:27;22241:9;:40;;;;;;;;;22236:2598;;;22309:71;22323:23;22348:20;22370:8;22309:12;:71::i;:::-;22304:358;;;22402:19;:36:::0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;;;;22402:36:0::1;-1:-1:-1::0;;;;;22402:36:0;::::1;::::0;;::::1;::::0;;;-1:-1:-1;22457:35:0;;;:23:::1;22402:36;22457:35:::0;;;;:39;22520:45:::1;::::0;22402:36;22520:12:::1;:45::i;:::-;22515:132;;22591:19;:36:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;22591:36:0;;;;;::::1;::::0;;-1:-1:-1;;;;;;22591:36:0::1;-1:-1:-1::0;;;;;22591:36:0;::::1;;::::0;;22515:132:::1;-1:-1:-1::0;;;;;;22686:32:0;::::1;;::::0;;;:20:::1;:32;::::0;;;;;;::::1;::::0;::::1;22685:33;-1:-1:-1::0;;22733:41:0;;::::1;::::0;::::1;::::0;;;22236:2598:::1;;;22812:23;22799:9;:36;;;;;;;;;22794:2040;;;22863:63;22877:19;22898:16;22916:8;22863:12;:63::i;:::-;22858:283;;;-1:-1:-1::0;;;;;22948:31:0;::::1;22982:1;22948:31:::0;;;:19:::1;:31;::::0;;;;:35;23007:41:::1;23021:15;22969:8:::0;23007:12:::1;:41::i;:::-;23002:124;;23074:15;:32:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;23074:32:0;;;;;::::1;::::0;;-1:-1:-1;;;;;;23074:32:0::1;-1:-1:-1::0;;;;;23074:32:0;::::1;;::::0;;23002:124:::1;-1:-1:-1::0;;;;;;23165:28:0;;::::1;;::::0;;;:16:::1;:28;::::0;;;;;;;;;::::1;::::0;::::1;23164:29;-1:-1:-1::0;;23208:37:0;;::::1;::::0;::::1;::::0;;;23260:14:::1;:26:::0;;;;;;:40;;-1:-1:-1;;;;;;23260:40:0::1;::::0;;::::1;::::0;;;::::1;::::0;;;22794:2040:::1;;;23338:25;23325:9;:38;;;;;;;;;23320:1514;;;23391:67;23405:21;23428:18;23448:8;23391:12;:67::i;:::-;23386:293;;;-1:-1:-1::0;;;;;23480:33:0;::::1;23516:1;23480:33:::0;;;:21:::1;:33;::::0;;;;:37;23541:43:::1;23555:17;23503:8:::0;23541:12:::1;:43::i;:::-;23536:128;;23610:17;:34:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;23610:34:0;;;;;::::1;::::0;;-1:-1:-1;;;;;;23610:34:0::1;-1:-1:-1::0;;;;;23610:34:0;::::1;;::::0;;23536:128:::1;-1:-1:-1::0;;;;;;23703:30:0;::::1;;::::0;;;:18:::1;:30;::::0;;;;;;::::1;::::0;::::1;23702:31;-1:-1:-1::0;;23748:39:0;;::::1;::::0;::::1;::::0;;;23320:1514:::1;;;23825:15;23812:9;:28;;;;;;;;;23807:1027;;;23868:47;23882:11;23895:8;23905;23868:12;:47::i;:::-;23863:243;;;-1:-1:-1::0;;;;;23937:23:0;::::1;23963:1;23937:23:::0;;;:11:::1;:23;::::0;;;;:27;23988:33:::1;24002:7;23950:8:::0;23988:12:::1;:33::i;:::-;23983:108;;24047:7;:24:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;24047:24:0;;;;;::::1;::::0;;-1:-1:-1;;;;;;24047:24:0::1;-1:-1:-1::0;;;;;24047:24:0;::::1;;::::0;;23983:108:::1;-1:-1:-1::0;;;;;;24130:20:0;::::1;;::::0;;;:8:::1;:20;::::0;;;;;;::::1;::::0;::::1;24129:21;-1:-1:-1::0;;24165:29:0;;::::1;::::0;::::1;::::0;;;23807:1027:::1;;;24232:22;24219:9;:35;;;;;;;;;24214:620;;;24282:61;24296:18;24316:15;24333:8;24282:12;:61::i;:::-;24277:278;;;-1:-1:-1::0;;;;;24365:30:0;::::1;24398:1;24365:30:::0;;;:18:::1;:30;::::0;;;;:34;24423:40:::1;24437:14;24385:8:::0;24423:12:::1;:40::i;:::-;24418:122;;24489:14;:31:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;24489:31:0;;;;;::::1;::::0;;-1:-1:-1;;;;;;24489:31:0::1;-1:-1:-1::0;;;;;24489:31:0;::::1;;::::0;;24418:122:::1;-1:-1:-1::0;;;;;;24579:27:0;::::1;;::::0;;;:15:::1;:27;::::0;;;;;;::::1;::::0;::::1;24578:28;-1:-1:-1::0;;24621:36:0;;::::1;::::0;::::1;::::0;;;24214:620:::1;;;24695:13;24682:9;:26;;;;;;;;;24677:157;;;-1:-1:-1::0;24743:1:0::1;24731:9;:13:::0;24759:4:::1;:15:::0;;-1:-1:-1;;;;;;24759:15:0::1;-1:-1:-1::0;;;;;24759:15:0;::::1;;::::0;;-1:-1:-1;24677:157:0::1;;;24829:5;24822:12;;;;;24677:157;24869:9;24852:46;;;;;;;;;::::0;;-1:-1:-1;;;;;24852:46:0;::::1;::::0;;;::::1;;;::::0;::::1;::::0;;;::::1;::::0;;;;;;;;;::::1;24916:4;24909:11;;;4126:1;20095:4833:::0;;;;;:::o;10352:21::-;;;;:::o;8604:32::-;;;;;;;;;;;;8990:57;;;;;;;;;;;;;:::o;288:136::-;346:7;373:43;377:1;380;373:43;;;;;;;;;;;;;;;;;:3;:43::i;5561:177::-;5671:58;;;-1:-1:-1;;;;;5671:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5671:58:0;-1:-1:-1;;;5671:58:0;;;5644:86;;5664:5;;5644:19;:86::i;:::-;5561:177;;;:::o;99:181::-;157:7;189:5;;;213:6;;;;205:46;;;;;-1:-1:-1;;;205:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;632:250;690:7;714:6;710:47;;-1:-1:-1;744:1:0;737:8;;710:47;781:5;;;785:1;781;:5;:1;805:5;;;;;:10;797:56;;;;-1:-1:-1;;;797:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;890:132;948:7;975:39;979:1;982;975:39;;;;;;;;;;;;;;;;;:3;:39::i;5746:205::-;5874:68;;;-1:-1:-1;;;;;5874:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5874:68:0;-1:-1:-1;;;5874:68:0;;;5847:96;;5867:5;;5847:19;:96::i;:::-;5746:205;;;;:::o;25176:438::-;-1:-1:-1;;;;;25389:19:0;;25365:4;25389:19;;;;;;;;;;;;;25383:210;;-1:-1:-1;;;;;25435:18:0;;;;;;;;;;;;;;25426:48;;;;;-1:-1:-1;;;25426:48:0;;;;;;;;;;;;-1:-1:-1;;;25426:48:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;25498:18:0;;;;;;;;;;;;;;25520:12;-1:-1:-1;25498:34:0;25489:66;;;;;-1:-1:-1;;;25489:66:0;;;;;;;;;;;;-1:-1:-1;;;25489:66:0;;;;;;;;;;;;;;;-1:-1:-1;25577:4:0;25570:11;;25383:210;-1:-1:-1;25601:5:0;25176:438;;;;;:::o;25783:277::-;25872:4;;25890:140;25911:12;;25907:16;;25890:140;;;25964:6;-1:-1:-1;;;;;25950:20:0;:5;25957:1;25950:10;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25950:10:0;:20;25946:73;;;25999:4;25992:11;;;;;25946:73;25925:3;;25890:140;;432:192;518:7;554:12;546:6;;;;538:29;;;;-1:-1:-1;;;538:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;590:5:0;;;432:192::o;5959:418::-;6040:23;6066:69;6094:4;6066:69;;;;;;;;;;;;;;;;;6074:5;-1:-1:-1;;;;;6066:27:0;;;:69;;;;;:::i;:::-;6150:17;;6040:95;;-1:-1:-1;6150:21:0;6146:224;;6292:10;6281:30;;;;;;;;;;;;;;;-1:-1:-1;6281:30:0;6273:85;;;;-1:-1:-1;;;6273:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1030:189;1116:7;1151:12;1144:5;1136:28;;;;-1:-1:-1;;;1136:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1175:9;1191:1;1187;:5;;;;;;;1030:189;-1:-1:-1;;;;;1030:189:0:o;1679:196::-;1782:12;1814:53;1837:6;1845:4;1851:1;1854:12;1814:22;:53::i;:::-;1807:60;1679:196;-1:-1:-1;;;;1679:196:0:o;1883:817::-;2013:12;2046:18;2057:6;2046:10;:18::i;:::-;2038:60;;;;;-1:-1:-1;;;2038:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;2172:12;2186:23;2213:6;-1:-1:-1;;;;;2213:11:0;2233:8;2244:4;2213:36;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2213:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2171:78;;;;2264:7;2260:433;;;2295:10;-1:-1:-1;2288:17:0;;-1:-1:-1;2288:17:0;2260:433;2342:17;;:21;2338:344;;2510:10;2504:17;2571:15;2558:10;2554:2;2550:19;2543:44;2458:148;2646:20;;-1:-1:-1;;;2646:20:0;;;;;;;;;;;;;;;;;2653:12;;2646:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1249:422;1616:20;1655:8;;;1249:422::o

Swarm Source

ipfs://54a6f27ef5b8917fe056573daf7f01c0a76ef2058429267fba261bc457ba4393
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.