ETH Price: $2,529.29 (-0.36%)

Contract

0x8739f0EeF3163C3db7b994d0e301BC375d757aF6
 
Transaction Hash
Method
Block
From
To
Manage157060562022-10-08 21:27:35746 days ago1665264455IN
0x8739f0Ee...75d757aF6
0 ETH0.0035179330.53923941
Manage150655802022-07-02 21:46:00844 days ago1656798360IN
0x8739f0Ee...75d757aF6
0 ETH0.0016533619.91119327
Manage150648902022-07-02 19:04:45844 days ago1656788685IN
0x8739f0Ee...75d757aF6
0 ETH0.0011518713.87188486
Manage150614492022-07-02 6:26:37845 days ago1656743197IN
0x8739f0Ee...75d757aF6
0 ETH0.0008891213.48688701
Manage150372242022-06-28 1:18:08849 days ago1656379088IN
0x8739f0Ee...75d757aF6
0 ETH0.0039185247.09878572
Manage148433682022-05-25 18:14:35882 days ago1653502475IN
0x8739f0Ee...75d757aF6
0 ETH0.00934573141.36643107
Manage145155512022-04-03 21:28:26934 days ago1649021306IN
0x8739f0Ee...75d757aF6
0 ETH0.0050450552.38626553
Manage145155512022-04-03 21:28:26934 days ago1649021306IN
0x8739f0Ee...75d757aF6
0 ETH0.0060981852.38626553
Manage144318652022-03-21 20:36:18947 days ago1647894978IN
0x8739f0Ee...75d757aF6
0 ETH0.0027628241.90101802
Manage143949002022-03-16 2:29:37953 days ago1647397777IN
0x8739f0Ee...75d757aF6
0 ETH0.0026307739.80108555
Manage143948982022-03-16 2:28:52953 days ago1647397732IN
0x8739f0Ee...75d757aF6
0 ETH0.0023970737.91273182
Manage143144982022-03-03 14:24:43966 days ago1646317483IN
0x8739f0Ee...75d757aF6
0 ETH0.0039519959.93589042
Manage142990302022-03-01 4:50:26968 days ago1646110226IN
0x8739f0Ee...75d757aF6
0 ETH0.0047084971.23507221
Manage142923032022-02-28 3:48:36969 days ago1646020116IN
0x8739f0Ee...75d757aF6
0 ETH0.0047368271.66364697
Manage142852282022-02-27 1:22:56970 days ago1645924976IN
0x8739f0Ee...75d757aF6
0 ETH0.0040681148.8967605
Manage142849012022-02-27 0:10:10970 days ago1645920610IN
0x8739f0Ee...75d757aF6
0 ETH0.0020903131.62443006
Manage142510182022-02-21 18:24:02975 days ago1645467842IN
0x8739f0Ee...75d757aF6
0 ETH0.00715057108.18148301
Manage142510082022-02-21 18:22:36975 days ago1645467756IN
0x8739f0Ee...75d757aF6
0 ETH0.01113756168.9429889
Manage142232122022-02-17 10:51:40980 days ago1645095100IN
0x8739f0Ee...75d757aF6
0 ETH0.0022986134.77585679
Manage141439372022-02-05 4:52:51992 days ago1644036771IN
0x8739f0Ee...75d757aF6
0 ETH0.0052124578.85944909
Manage140696372022-01-24 17:16:561003 days ago1643044616IN
0x8739f0Ee...75d757aF6
0 ETH0.01756496266.3901585
Manage140368742022-01-19 15:53:281008 days ago1642607608IN
0x8739f0Ee...75d757aF6
0 ETH0.00988074149.85128427
Manage140368632022-01-19 15:49:441008 days ago1642607384IN
0x8739f0Ee...75d757aF6
0 ETH0.0092691140.57523245
Manage139689842022-01-09 3:47:341019 days ago1641700054IN
0x8739f0Ee...75d757aF6
0 ETH0.0061508593.28377638
Manage139687652022-01-09 2:58:191019 days ago1641697099IN
0x8739f0Ee...75d757aF6
0 ETH0.00676153102.54536978
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
UniversalTreasury

Compiler Version
v0.7.5+commit.eb77ed08

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, GNU AGPLv3 license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-12-01
*/

// 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 IUSVERC20 {
    function burnFrom(address account_, uint256 amount_) external;
}

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

contract UniversalTreasury 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, SUSV }

    address public immutable USV;
    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 barterCalculator; // barter 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 sUSV;
    uint public sUSVQueue; // Delays change to sUSV address
    
    uint public totalReserves; // Risk-free value of all assets
    uint public totalDebt;

    constructor (
        address _USV,
        address _DAI,
        address _Frax,
        uint _blocksNeededForQueue
    ) {
        require( _USV != address(0) );
        USV = _USV;

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

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

        blocksNeededForQueue = _blocksNeededForQueue;
    }

    /**
        @notice allow approved address to deposit an asset for USV
        @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 USV needed and store amount of rewards for distribution
        send_ = value.sub( _profit );
        IERC20Mintable( USV ).mint( msg.sender, send_ );

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

        emit Deposit( _token, _amount, value );
    }

    /**
        @notice allow approved address to burn USV 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 );
        IUSVERC20( USV ).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( sUSV ).balanceOf( msg.sender ); // Can only borrow against sUSV 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 USV
        @param _amount uint
     */
    function repayDebtWithUSV( uint _amount ) external {
        require( isDebtor[ msg.sender ], "Not approved" );

        IUSVERC20( USV ).burnFrom( msg.sender, _amount );

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

        emit RepayDebt( msg.sender, USV, _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( USV ).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( USV ).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 USV 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 USV decimals
            value_ = _amount.mul( 10 ** IERC20( USV ).decimals() ).div( 10 ** IERC20( _token ).decimals() );
        } else if ( isLiquidityToken[ _token ] ) {
            value_ = IBarterCalculator( barterCalculator[ _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.SUSV ) { // 9
            sUSVQueue = 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;
            barterCalculator[ _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.SUSV ) { // 9
            sUSVQueue = 0;
            sUSV = _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 Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_USV","type":"address"},{"internalType":"address","name":"_DAI","type":"address"},{"internalType":"address","name":"_Frax","type":"address"},{"internalType":"uint256","name":"_blocksNeededForQueue","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"enum UniversalTreasury.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 UniversalTreasury.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":[{"internalType":"address","name":"","type":"address"}],"name":"ReserveManagerQueue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"USV","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"auditReserves","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"barterCalculator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"blocksNeededForQueue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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 UniversalTreasury.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"},{"internalType":"address","name":"_token","type":"address"}],"name":"repayDebtWithReserve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"repayDebtWithUSV","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":"sUSV","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sUSVQueue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"enum UniversalTreasury.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"}]

60c06040523480156200001157600080fd5b506040516200636e3803806200636e833981810160405260808110156200003757600080fd5b8101908080519060200190929190805190602001909291908051906020019092919080519060200190929190505050336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fea8258f2d9ddb679928cf34b78cf645b7feda9acc828e4dd82d014eaae270eba60405160405180910390a3600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156200015c57600080fd5b8373ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b815250506001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506002839080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506002829080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060a081815250505050505060805160601c60a051615fdd620003916000398061351052806139bc5280613a565280613af05280613b8f5280613c375280613cd15280613d705280613e185280613eb25280613f4b5250806113ae5280611a3152806121325280612ce45280613350528061387952806140fb52806142545250615fdd6000f3fe608060405234801561001057600080fd5b50600436106102f05760003560e01c80638f840ddd1161019d578063d796ffb8116100e9578063f3ed9e5d116100a2578063fbfd393b1161007c578063fbfd393b146110c4578063fc7b9c181461114b578063fd1ec01014611169578063fff9ee87146111c1576102f0565b8063f3ed9e5d1461100a578063f894328e14611038578063fb9395881461106c576102f0565b8063d796ffb814610e13578063df89b34414610e61578063e222ad7814610ebb578063e83afee314610eef578063ebd83cd814610f56578063ee4e19a114610fb0576102f0565b8063b1bd38b011610156578063c24ad43e11610130578063c24ad43e14610ced578063cd85641a14610d45578063d031370b14610d9d578063d07f390f14610df5576102f0565b8063b1bd38b014610bd1578063b5b1d56014610c29578063bc157ac114610c81576102f0565b80638f840ddd14610a31578063932cc8c314610a4f578063a1210a2d14610aa7578063a2f812d714610b01578063a569e57114610b1f578063ab319c9a14610b79576102f0565b806346f68ee91161025c5780636b5e40a711610215578063869871bf116101ef578063869871bf146108cf57806387d67dff146109275780638f59c727146109815780638f6a7b57146109d9576102f0565b80636b5e40a7146107c757806370a0502a1461081f578063788c6c0114610877576102f0565b806346f68ee914610643578063481c6a75146106875780634e83423c146106bb5780635a96ac0a1461071557806368c31dd51461071f5780636a20de9214610779576102f0565b8063124154ca116102ae578063124154ca1461046957806312422d23146104c35780631eec5a9a146105115780632b7ce5001461057357806333dd303c1461057d578063437f7912146105eb576102f0565b8062f714ce146102f55780630619aff114610343578063089208d81461039b578063094a8651146103a55780630b0eee30146103fd5780630c3513a81461044b575b600080fd5b6103416004803603604081101561030b57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611219565b005b61036f6004803603602081101561035957600080fd5b8101908080359060200190929190505050611525565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103a3611564565b005b6103e7600480360360208110156103bb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506116e3565b6040518082815260200191505060405180910390f35b6104496004803603604081101561041357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506116fb565b005b610453611a24565b6040518082815260200191505060405180910390f35b6104ab6004803603602081101561047f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611af4565b60405180821515815260200191505060405180910390f35b61050f600480360360408110156104d957600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611b14565b005b61055d6004803603604081101561052757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061204f565b6040518082815260200191505060405180910390f35b61057b612360565b005b6105bf6004803603602081101561059357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612720565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6106176004803603602081101561060157600080fd5b8101908080359060200190929190505050612753565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6106856004803603602081101561065957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612792565b005b61068f612997565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6106fd600480360360208110156106d157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506129c0565b60405180821515815260200191505060405180910390f35b61071d6129e0565b005b6107616004803603602081101561073557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612b86565b60405180821515815260200191505060405180910390f35b6107c56004803603604081101561078f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612ba6565b005b6107f3600480360360208110156107dd57600080fd5b8101908080359060200190929190505050612df4565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61084b6004803603602081101561083557600080fd5b8101908080359060200190929190505050612e33565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6108b96004803603602081101561088d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612e72565b6040518082815260200191505060405180910390f35b6108fb600480360360208110156108e557600080fd5b8101908080359060200190929190505050612e8a565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6109696004803603602081101561093d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612ec9565b60405180821515815260200191505060405180910390f35b6109c36004803603602081101561099757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612ee9565b6040518082815260200191505060405180910390f35b610a05600480360360208110156109ef57600080fd5b8101908080359060200190929190505050612f01565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610a39612f40565b6040518082815260200191505060405180910390f35b610a9160048036036020811015610a6557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612f46565b6040518082815260200191505060405180910390f35b610ae960048036036020811015610abd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612f5e565b60405180821515815260200191505060405180910390f35b610b09612f7e565b6040518082815260200191505060405180910390f35b610b6160048036036020811015610b3557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612f84565b60405180821515815260200191505060405180910390f35b610bbb60048036036020811015610b8f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612fa4565b6040518082815260200191505060405180910390f35b610c1360048036036020811015610be757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612fbc565b6040518082815260200191505060405180910390f35b610c5560048036036020811015610c3f57600080fd5b8101908080359060200190929190505050612fd4565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610cd760048036036060811015610c9757600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050613013565b6040518082815260200191505060405180910390f35b610d2f60048036036020811015610d0357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061349f565b6040518082815260200191505060405180910390f35b610d8760048036036020811015610d5b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506134b7565b6040518082815260200191505060405180910390f35b610dc960048036036020811015610db357600080fd5b81019080803590602001909291905050506134cf565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610dfd61350e565b6040518082815260200191505060405180910390f35b610e5f60048036036040811015610e2957600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613532565b005b610ea360048036036020811015610e7757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613857565b60405180821515815260200191505060405180910390f35b610ec3613877565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610f3e60048036036040811015610f0557600080fd5b81019080803560ff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061389b565b60405180821515815260200191505060405180910390f35b610f9860048036036020811015610f6c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613ffa565b60405180821515815260200191505060405180910390f35b610ff260048036036020811015610fc657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061401a565b60405180821515815260200191505060405180910390f35b6110366004803603602081101561102057600080fd5b810190808035906020019092919050505061403a565b005b6110406142e2565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6110ae6004803603602081101561108257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050614308565b6040518082815260200191505060405180910390f35b611133600480360360608110156110da57600080fd5b81019080803560ff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050614320565b60405180821515815260200191505060405180910390f35b61115361549b565b6040518082815260200191505060405180910390f35b6111956004803603602081101561117f57600080fd5b81019080803590602001909291905050506154a1565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b611203600480360360208110156111d757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506154e0565b6040518082815260200191505060405180910390f35b600360008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166112d8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f4e6f74206163636570746564000000000000000000000000000000000000000081525060200191505060405180910390fd5b60011515600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151461139e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f4e6f7420617070726f766564000000000000000000000000000000000000000081525060200191505060405180910390fd5b60006113aa828461204f565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166379cc679033836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561143d57600080fd5b505af1158015611451573d6000803e3d6000fd5b5050505061146a816021546154f890919063ffffffff16565b6021819055506021547f93bb8edd35984706eee1b92541281f7f62d33c01c5b2ec0929a113603bd21d6660405160405180910390a26114ca33848473ffffffffffffffffffffffffffffffffffffffff166155429092919063ffffffff16565b8173ffffffffffffffffffffffffffffffffffffffff167fdf273cb619d95419a9cd0ec88123a0538c85064229baa6363788f743fff90deb8483604051808381526020018281526020019250505060405180910390a2505050565b6012818154811061153557600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b3373ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611625576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fea8258f2d9ddb679928cf34b78cf645b7feda9acc828e4dd82d014eaae270eba60405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b601b6020528060005260406000206000915090505481565b600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561181157601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661180c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f4e6f7420617070726f766564000000000000000000000000000000000000000081525060200191505060405180910390fd5b6118d1565b601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166118d0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f4e6f7420617070726f766564000000000000000000000000000000000000000081525060200191505060405180910390fd5b5b60006118dd838361204f565b90506118e7611a24565b81111561195c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f496e73756666696369656e74207265736572766573000000000000000000000081525060200191505060405180910390fd5b611971816021546154f890919063ffffffff16565b6021819055506021547f93bb8edd35984706eee1b92541281f7f62d33c01c5b2ec0929a113603bd21d6660405160405180910390a26119d133838573ffffffffffffffffffffffffffffffffffffffff166155429092919063ffffffff16565b8273ffffffffffffffffffffffffffffffffffffffff167f2bb2640731848fe9820ba48dbc978c1fc9bbd5f11b948bfab05b7dee3378fd80836040518082815260200191505060405180910390a2505050565b6000611aef611ade6022547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015611a9557600080fd5b505afa158015611aa9573d6000803e3d6000fd5b505050506040513d6020811015611abf57600080fd5b81019080805190602001909291905050506154f890919063ffffffff16565b6021546154f890919063ffffffff16565b905090565b60066020528060005260406000206000915054906101000a900460ff1681565b601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611bd3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f4e6f7420617070726f766564000000000000000000000000000000000000000081525060200191505060405180910390fd5b600360008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611c92576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f4e6f74206163636570746564000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000611c9e828461204f565b90506000601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611d2b57600080fd5b505afa158015611d3f573d6000803e3d6000fd5b505050506040513d6020811015611d5557600080fd5b810190808051906020019092919050505090506000611dbc601b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836154f890919063ffffffff16565b905080831115611e34576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f457863656564732064656274206c696d6974000000000000000000000000000081525060200191505060405180910390fd5b611e8683601b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546155e490919063ffffffff16565b601b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611ede836022546155e490919063ffffffff16565b602281905550611ef9836021546154f890919063ffffffff16565b6021819055506021547f93bb8edd35984706eee1b92541281f7f62d33c01c5b2ec0929a113603bd21d6660405160405180910390a28373ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33876040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015611f9f57600080fd5b505af1158015611fb3573d6000803e3d6000fd5b505050506040513d6020811015611fc957600080fd5b8101908080519060200190929190505050508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f7e1a939bed137a819b5d2979822c67f877689f7a863d5e4cb57cdca97b2977d68786604051808381526020018281526020019250505060405180910390a35050505050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156121fb576121f48373ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156120ec57600080fd5b505afa158015612100573d6000803e3d6000fd5b505050506040513d602081101561211657600080fd5b810190808051906020019092919050505060ff16600a0a6121e67f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561219657600080fd5b505afa1580156121aa573d6000803e3d6000fd5b505050506040513d60208110156121c057600080fd5b810190808051906020019092919050505060ff16600a0a8561566c90919063ffffffff16565b6156f290919063ffffffff16565b905061235a565b600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561235957601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634249719f84846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060206040518083038186803b15801561231b57600080fd5b505afa15801561232f573d6000803e3d6000fd5b505050506040513d602081101561234557600080fd5b810190808051906020019092919050505090505b5b92915050565b3373ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612421576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600080600090505b600280549050811015612570576125616125526002838154811061244957fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166002848154811061248157fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561251257600080fd5b505afa158015612526573d6000803e3d6000fd5b505050506040513d602081101561253c57600080fd5b810190808051906020019092919050505061204f565b836155e490919063ffffffff16565b91508080600101915050612429565b5060005b600b805490508110156126bb576126ac61269d600b838154811061259457fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600b84815481106125cc57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561265d57600080fd5b505afa158015612671573d6000803e3d6000fd5b505050506040513d602081101561268757600080fd5b810190808051906020019092919050505061204f565b836155e490919063ffffffff16565b91508080600101915050612574565b5080602181905550807f93bb8edd35984706eee1b92541281f7f62d33c01c5b2ec0929a113603bd21d6660405160405180910390a2807fec691f09f6924b27932253f85caf99bacc30360cc0e50a1cc4d2acc24601446660405160405180910390a250565b60116020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6008818154811061276357600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b3373ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612853576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156128d9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180615f156026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fea8258f2d9ddb679928cf34b78cf645b7feda9acc828e4dd82d014eaae270eba60405160405180910390a380600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b601d6020528060005260406000206000915054906101000a900460ff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612a86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180615f3b6022913960400191505060405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167faa151555690c956fc3ea32f106bb9f119b5237a061eaa8557cff3e51e3792c8d60405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60036020528060005260406000206000915054906101000a900460ff1681565b601d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612c65576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f4e6f7420617070726f766564000000000000000000000000000000000000000081525060200191505060405180910390fd5b612c6d611a24565b811115612ce2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f496e73756666696369656e74207265736572766573000000000000000000000081525060200191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166340c10f1983836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015612d7357600080fd5b505af1158015612d87573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167ffa8ccab40e7da8146c2304cd0950334fd30a6ba093abe86261aa13911fed849c836040518082815260200191505060405180910390a35050565b60058181548110612e0457600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60158181548110612e4357600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60046020528060005260406000206000915090505481565b60188181548110612e9a57600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60096020528060005260406000206000915054906101000a900460ff1681565b600d6020528060005260406000206000915090505481565b600e8181548110612f1157600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60215481565b60076020528060005260406000206000915090505481565b600f6020528060005260406000206000915054906101000a900460ff1681565b60205481565b600c6020528060005260406000206000915054906101000a900460ff1681565b60176020528060005260406000206000915090505481565b60146020528060005260406000206000915090505481565b601c8181548110612fe457600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806130b65750600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b613128576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f4e6f74206163636570746564000000000000000000000000000000000000000081525060200191505060405180910390fd5b6131553330868673ffffffffffffffffffffffffffffffffffffffff1661573c909392919063ffffffff16565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561326b57600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16613266576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f4e6f7420617070726f766564000000000000000000000000000000000000000081525060200191505060405180910390fd5b61332b565b600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661332a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f4e6f7420617070726f766564000000000000000000000000000000000000000081525060200191505060405180910390fd5b5b6000613337848661204f565b905061334c83826154f890919063ffffffff16565b91507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166340c10f1933846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b1580156133df57600080fd5b505af11580156133f3573d6000803e3d6000fd5b5050505061340c816021546155e490919063ffffffff16565b6021819055506021547f93bb8edd35984706eee1b92541281f7f62d33c01c5b2ec0929a113603bd21d6660405160405180910390a28373ffffffffffffffffffffffffffffffffffffffff167f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a158683604051808381526020018281526020019250505060405180910390a2509392505050565b600a6020528060005260406000206000915090505481565b601a6020528060005260406000206000915090505481565b600281815481106134df57600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166135f1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f4e6f7420617070726f766564000000000000000000000000000000000000000081525060200191505060405180910390fd5b600360008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166136b0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f4e6f74206163636570746564000000000000000000000000000000000000000081525060200191505060405180910390fd5b6136dd3330848473ffffffffffffffffffffffffffffffffffffffff1661573c909392919063ffffffff16565b60006136e9828461204f565b905061373d81601b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546154f890919063ffffffff16565b601b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613795816022546154f890919063ffffffff16565b6022819055506137b0816021546155e490919063ffffffff16565b6021819055506021547f93bb8edd35984706eee1b92541281f7f62d33c01c5b2ec0929a113603bd21d6660405160405180910390a28173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fc6d98eecfc9c78ab62c89a82950079b54874749f1f6f24090f7acc758bc2f3098584604051808381526020018281526020019250505060405180910390a3505050565b60166020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b60003373ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461395e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561399857600080fd5b600060098111156139a557fe5b8360098111156139b157fe5b1415613a32576139ea7f0000000000000000000000000000000000000000000000000000000000000000436155e490919063ffffffff16565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613f96565b60016009811115613a3f57fe5b836009811115613a4b57fe5b1415613acc57613a847f0000000000000000000000000000000000000000000000000000000000000000436155e490919063ffffffff16565b600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613f95565b60026009811115613ad957fe5b836009811115613ae557fe5b1415613b6657613b1e7f0000000000000000000000000000000000000000000000000000000000000000436155e490919063ffffffff16565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613f94565b60036009811115613b7357fe5b836009811115613b7f57fe5b1415613c1357613bcb613bbc60027f000000000000000000000000000000000000000000000000000000000000000061566c90919063ffffffff16565b436155e490919063ffffffff16565b601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613f93565b60046009811115613c2057fe5b836009811115613c2c57fe5b1415613cad57613c657f0000000000000000000000000000000000000000000000000000000000000000436155e490919063ffffffff16565b601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613f92565b60056009811115613cba57fe5b836009811115613cc657fe5b1415613d4757613cff7f0000000000000000000000000000000000000000000000000000000000000000436155e490919063ffffffff16565b600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613f91565b60066009811115613d5457fe5b836009811115613d6057fe5b1415613df457613dac613d9d60027f000000000000000000000000000000000000000000000000000000000000000061566c90919063ffffffff16565b436155e490919063ffffffff16565b601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613f90565b60076009811115613e0157fe5b836009811115613e0d57fe5b1415613e8e57613e467f0000000000000000000000000000000000000000000000000000000000000000436155e490919063ffffffff16565b601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613f8f565b60086009811115613e9b57fe5b836009811115613ea757fe5b1415613f2857613ee07f0000000000000000000000000000000000000000000000000000000000000000436155e490919063ffffffff16565b601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613f8e565b600980811115613f3457fe5b836009811115613f4057fe5b1415613f8457613f797f0000000000000000000000000000000000000000000000000000000000000000436155e490919063ffffffff16565b602081905550613f8d565b60009050613ff4565b5b5b5b5b5b5b5b5b5b826009811115613fa257fe5b7f0e4f2c4b5bc209d509bc3d49348c787fefadc66a79351b470599ac0f5be52eaf83604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a2600190505b92915050565b60136020528060005260406000206000915054906101000a900460ff1681565b60196020528060005260406000206000915054906101000a900460ff1681565b601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166140f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f4e6f7420617070726f766564000000000000000000000000000000000000000081525060200191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166379cc679033836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561418a57600080fd5b505af115801561419e573d6000803e3d6000fd5b505050506141f481601b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546154f890919063ffffffff16565b601b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061424c816022546154f890919063ffffffff16565b6022819055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fc6d98eecfc9c78ab62c89a82950079b54874749f1f6f24090f7acc758bc2f3098384604051808381526020018281526020019250505060405180910390a350565b601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601e6020528060005260406000206000915090505481565b60003373ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146143e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561441d57600080fd5b600080600981111561442b57fe5b85600981111561443757fe5b14156145b45761444a60076006866157fd565b15614508576000600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061449f6005856159cd565b614507576005849080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615905080600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061542b565b600160098111156145c157fe5b8560098111156145cd57fe5b141561474a576145e0600a6009866157fd565b1561469e576000600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506146356008856159cd565b61469d576008849080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615905080600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061542a565b6002600981111561475757fe5b85600981111561476357fe5b14156148e05761477660046003866157fd565b15614834576000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506147cb6002856159cd565b614833576002849080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615905080600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550615429565b600360098111156148ed57fe5b8560098111156148f957fe5b1415614ad95761490c60146013866157fd565b15614a2d576012849080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000601460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506149c46012856159cd565b614a2c576012849080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5b601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615905080601360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550615428565b60046009811115614ae657fe5b856009811115614af257fe5b1415614cd257614b056010600f866157fd565b15614c2657600e849080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000601060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614bbd600e856159cd565b614c2557600e849080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5b600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615905080600f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550615427565b60056009811115614cdf57fe5b856009811115614ceb57fe5b1415614ee657614cfe600d600c866157fd565b15614dbc576000600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614d53600b856159cd565b614dbb57600b849080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5b600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615905080600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555082601160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550615426565b60066009811115614ef357fe5b856009811115614eff57fe5b141561507c57614f1260176016866157fd565b15614fd0576000601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614f676015856159cd565b614fcf576015849080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5b601660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615905080601660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550615425565b6007600981111561508957fe5b85600981111561509557fe5b1415615212576150a8601a6019866157fd565b15615166576000601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506150fd6018856159cd565b615165576018849080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5b601960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615905080601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550615424565b6008600981111561521f57fe5b85600981111561522b57fe5b14156153a85761523e601e601d866157fd565b156152fc576000601e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550615293601c856159cd565b6152fb57601c849080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5b601d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615905080601d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550615423565b6009808111156153b457fe5b8560098111156153c057fe5b141561541857600060208190555083601f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050615422565b6000915050615494565b5b5b5b5b5b5b5b5b5b84600981111561543757fe5b7f0dcacb7e392f3d6a216ed2660e3dcfd40b7793d33591db2ba185a6b8e44fc4778583604051808373ffffffffffffffffffffffffffffffffffffffff16815260200182151581526020019250505060405180910390a260019150505b9392505050565b60225481565b600b81815481106154b157600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60106020528060005260406000206000915090505481565b600061553a83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250615a6e565b905092915050565b6155df8363a9059cbb60e01b8484604051602401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050615b2e565b505050565b600080828401905083811015615662576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b60008083141561567f57600090506156ec565b600082840290508284828161569057fe5b04146156e7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180615f5d6021913960400191505060405180910390fd5b809150505b92915050565b600061573483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250615c1d565b905092915050565b6157f7846323b872dd60e01b858585604051602401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050615b2e565b50505050565b60008260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166159c15760008460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541415615904576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f4d7573742071756575650000000000000000000000000000000000000000000081525060200191505060405180910390fd5b438460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156159b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f5175657565206e6f74206578706972656400000000000000000000000000000081525060200191505060405180910390fd5b600190506159c6565b600090505b9392505050565b600080600090505b8380549050811015615a62578273ffffffffffffffffffffffffffffffffffffffff16848281548110615a0457fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415615a55576001915050615a68565b80806001019150506159d5565b50600090505b92915050565b6000838311158290615b1b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015615ae0578082015181840152602081019050615ac5565b50505050905090810190601f168015615b0d5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b6060615b90826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16615ce39092919063ffffffff16565b9050600081511115615c1857808060200190516020811015615bb157600080fd5b8101908080519060200190929190505050615c17576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180615f7e602a913960400191505060405180910390fd5b5b505050565b60008083118290615cc9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015615c8e578082015181840152602081019050615c73565b50505050905090810190601f168015615cbb5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581615cd557fe5b049050809150509392505050565b6060615cf28484600085615cfb565b90509392505050565b6060615d0685615f01565b615d78576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000081525060200191505060405180910390fd5b600060608673ffffffffffffffffffffffffffffffffffffffff1685876040518082805190602001908083835b60208310615dc85780518252602082019150602081019050602083039250615da5565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114615e2a576040519150601f19603f3d011682016040523d82523d6000602084013e615e2f565b606091505b50915091508115615e44578092505050615ef9565b600081511115615e575780518082602001fd5b836040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015615ebe578082015181840152602081019050615ea3565b50505050905090810190601f168015615eeb5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b949350505050565b600080823b90506000811191505091905056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734f776e61626c653a206d757374206265206e6577206f776e657220746f2070756c6c536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f775361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a2646970667358221220d7121ed90e38fbe795407dde28a87d2bc150dedba8ddb1d716b8c99e6216dcc064736f6c6343000705003300000000000000000000000088536c9b2c4701b8db824e6a16829d5b5eb844400000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000853d955acef822db058eb8505911ed77f175b99e000000000000000000000000000000000000000000000000000000000000010c

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106102f05760003560e01c80638f840ddd1161019d578063d796ffb8116100e9578063f3ed9e5d116100a2578063fbfd393b1161007c578063fbfd393b146110c4578063fc7b9c181461114b578063fd1ec01014611169578063fff9ee87146111c1576102f0565b8063f3ed9e5d1461100a578063f894328e14611038578063fb9395881461106c576102f0565b8063d796ffb814610e13578063df89b34414610e61578063e222ad7814610ebb578063e83afee314610eef578063ebd83cd814610f56578063ee4e19a114610fb0576102f0565b8063b1bd38b011610156578063c24ad43e11610130578063c24ad43e14610ced578063cd85641a14610d45578063d031370b14610d9d578063d07f390f14610df5576102f0565b8063b1bd38b014610bd1578063b5b1d56014610c29578063bc157ac114610c81576102f0565b80638f840ddd14610a31578063932cc8c314610a4f578063a1210a2d14610aa7578063a2f812d714610b01578063a569e57114610b1f578063ab319c9a14610b79576102f0565b806346f68ee91161025c5780636b5e40a711610215578063869871bf116101ef578063869871bf146108cf57806387d67dff146109275780638f59c727146109815780638f6a7b57146109d9576102f0565b80636b5e40a7146107c757806370a0502a1461081f578063788c6c0114610877576102f0565b806346f68ee914610643578063481c6a75146106875780634e83423c146106bb5780635a96ac0a1461071557806368c31dd51461071f5780636a20de9214610779576102f0565b8063124154ca116102ae578063124154ca1461046957806312422d23146104c35780631eec5a9a146105115780632b7ce5001461057357806333dd303c1461057d578063437f7912146105eb576102f0565b8062f714ce146102f55780630619aff114610343578063089208d81461039b578063094a8651146103a55780630b0eee30146103fd5780630c3513a81461044b575b600080fd5b6103416004803603604081101561030b57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611219565b005b61036f6004803603602081101561035957600080fd5b8101908080359060200190929190505050611525565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103a3611564565b005b6103e7600480360360208110156103bb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506116e3565b6040518082815260200191505060405180910390f35b6104496004803603604081101561041357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506116fb565b005b610453611a24565b6040518082815260200191505060405180910390f35b6104ab6004803603602081101561047f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611af4565b60405180821515815260200191505060405180910390f35b61050f600480360360408110156104d957600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611b14565b005b61055d6004803603604081101561052757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061204f565b6040518082815260200191505060405180910390f35b61057b612360565b005b6105bf6004803603602081101561059357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612720565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6106176004803603602081101561060157600080fd5b8101908080359060200190929190505050612753565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6106856004803603602081101561065957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612792565b005b61068f612997565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6106fd600480360360208110156106d157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506129c0565b60405180821515815260200191505060405180910390f35b61071d6129e0565b005b6107616004803603602081101561073557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612b86565b60405180821515815260200191505060405180910390f35b6107c56004803603604081101561078f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612ba6565b005b6107f3600480360360208110156107dd57600080fd5b8101908080359060200190929190505050612df4565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61084b6004803603602081101561083557600080fd5b8101908080359060200190929190505050612e33565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6108b96004803603602081101561088d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612e72565b6040518082815260200191505060405180910390f35b6108fb600480360360208110156108e557600080fd5b8101908080359060200190929190505050612e8a565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6109696004803603602081101561093d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612ec9565b60405180821515815260200191505060405180910390f35b6109c36004803603602081101561099757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612ee9565b6040518082815260200191505060405180910390f35b610a05600480360360208110156109ef57600080fd5b8101908080359060200190929190505050612f01565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610a39612f40565b6040518082815260200191505060405180910390f35b610a9160048036036020811015610a6557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612f46565b6040518082815260200191505060405180910390f35b610ae960048036036020811015610abd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612f5e565b60405180821515815260200191505060405180910390f35b610b09612f7e565b6040518082815260200191505060405180910390f35b610b6160048036036020811015610b3557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612f84565b60405180821515815260200191505060405180910390f35b610bbb60048036036020811015610b8f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612fa4565b6040518082815260200191505060405180910390f35b610c1360048036036020811015610be757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612fbc565b6040518082815260200191505060405180910390f35b610c5560048036036020811015610c3f57600080fd5b8101908080359060200190929190505050612fd4565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610cd760048036036060811015610c9757600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050613013565b6040518082815260200191505060405180910390f35b610d2f60048036036020811015610d0357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061349f565b6040518082815260200191505060405180910390f35b610d8760048036036020811015610d5b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506134b7565b6040518082815260200191505060405180910390f35b610dc960048036036020811015610db357600080fd5b81019080803590602001909291905050506134cf565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610dfd61350e565b6040518082815260200191505060405180910390f35b610e5f60048036036040811015610e2957600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613532565b005b610ea360048036036020811015610e7757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613857565b60405180821515815260200191505060405180910390f35b610ec3613877565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610f3e60048036036040811015610f0557600080fd5b81019080803560ff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061389b565b60405180821515815260200191505060405180910390f35b610f9860048036036020811015610f6c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613ffa565b60405180821515815260200191505060405180910390f35b610ff260048036036020811015610fc657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061401a565b60405180821515815260200191505060405180910390f35b6110366004803603602081101561102057600080fd5b810190808035906020019092919050505061403a565b005b6110406142e2565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6110ae6004803603602081101561108257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050614308565b6040518082815260200191505060405180910390f35b611133600480360360608110156110da57600080fd5b81019080803560ff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050614320565b60405180821515815260200191505060405180910390f35b61115361549b565b6040518082815260200191505060405180910390f35b6111956004803603602081101561117f57600080fd5b81019080803590602001909291905050506154a1565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b611203600480360360208110156111d757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506154e0565b6040518082815260200191505060405180910390f35b600360008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166112d8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f4e6f74206163636570746564000000000000000000000000000000000000000081525060200191505060405180910390fd5b60011515600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151461139e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f4e6f7420617070726f766564000000000000000000000000000000000000000081525060200191505060405180910390fd5b60006113aa828461204f565b90507f00000000000000000000000088536c9b2c4701b8db824e6a16829d5b5eb8444073ffffffffffffffffffffffffffffffffffffffff166379cc679033836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561143d57600080fd5b505af1158015611451573d6000803e3d6000fd5b5050505061146a816021546154f890919063ffffffff16565b6021819055506021547f93bb8edd35984706eee1b92541281f7f62d33c01c5b2ec0929a113603bd21d6660405160405180910390a26114ca33848473ffffffffffffffffffffffffffffffffffffffff166155429092919063ffffffff16565b8173ffffffffffffffffffffffffffffffffffffffff167fdf273cb619d95419a9cd0ec88123a0538c85064229baa6363788f743fff90deb8483604051808381526020018281526020019250505060405180910390a2505050565b6012818154811061153557600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b3373ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611625576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fea8258f2d9ddb679928cf34b78cf645b7feda9acc828e4dd82d014eaae270eba60405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b601b6020528060005260406000206000915090505481565b600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561181157601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661180c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f4e6f7420617070726f766564000000000000000000000000000000000000000081525060200191505060405180910390fd5b6118d1565b601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166118d0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f4e6f7420617070726f766564000000000000000000000000000000000000000081525060200191505060405180910390fd5b5b60006118dd838361204f565b90506118e7611a24565b81111561195c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f496e73756666696369656e74207265736572766573000000000000000000000081525060200191505060405180910390fd5b611971816021546154f890919063ffffffff16565b6021819055506021547f93bb8edd35984706eee1b92541281f7f62d33c01c5b2ec0929a113603bd21d6660405160405180910390a26119d133838573ffffffffffffffffffffffffffffffffffffffff166155429092919063ffffffff16565b8273ffffffffffffffffffffffffffffffffffffffff167f2bb2640731848fe9820ba48dbc978c1fc9bbd5f11b948bfab05b7dee3378fd80836040518082815260200191505060405180910390a2505050565b6000611aef611ade6022547f00000000000000000000000088536c9b2c4701b8db824e6a16829d5b5eb8444073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015611a9557600080fd5b505afa158015611aa9573d6000803e3d6000fd5b505050506040513d6020811015611abf57600080fd5b81019080805190602001909291905050506154f890919063ffffffff16565b6021546154f890919063ffffffff16565b905090565b60066020528060005260406000206000915054906101000a900460ff1681565b601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611bd3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f4e6f7420617070726f766564000000000000000000000000000000000000000081525060200191505060405180910390fd5b600360008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611c92576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f4e6f74206163636570746564000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000611c9e828461204f565b90506000601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611d2b57600080fd5b505afa158015611d3f573d6000803e3d6000fd5b505050506040513d6020811015611d5557600080fd5b810190808051906020019092919050505090506000611dbc601b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836154f890919063ffffffff16565b905080831115611e34576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f457863656564732064656274206c696d6974000000000000000000000000000081525060200191505060405180910390fd5b611e8683601b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546155e490919063ffffffff16565b601b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611ede836022546155e490919063ffffffff16565b602281905550611ef9836021546154f890919063ffffffff16565b6021819055506021547f93bb8edd35984706eee1b92541281f7f62d33c01c5b2ec0929a113603bd21d6660405160405180910390a28373ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33876040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015611f9f57600080fd5b505af1158015611fb3573d6000803e3d6000fd5b505050506040513d6020811015611fc957600080fd5b8101908080519060200190929190505050508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f7e1a939bed137a819b5d2979822c67f877689f7a863d5e4cb57cdca97b2977d68786604051808381526020018281526020019250505060405180910390a35050505050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156121fb576121f48373ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156120ec57600080fd5b505afa158015612100573d6000803e3d6000fd5b505050506040513d602081101561211657600080fd5b810190808051906020019092919050505060ff16600a0a6121e67f00000000000000000000000088536c9b2c4701b8db824e6a16829d5b5eb8444073ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561219657600080fd5b505afa1580156121aa573d6000803e3d6000fd5b505050506040513d60208110156121c057600080fd5b810190808051906020019092919050505060ff16600a0a8561566c90919063ffffffff16565b6156f290919063ffffffff16565b905061235a565b600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561235957601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634249719f84846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060206040518083038186803b15801561231b57600080fd5b505afa15801561232f573d6000803e3d6000fd5b505050506040513d602081101561234557600080fd5b810190808051906020019092919050505090505b5b92915050565b3373ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612421576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600080600090505b600280549050811015612570576125616125526002838154811061244957fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166002848154811061248157fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561251257600080fd5b505afa158015612526573d6000803e3d6000fd5b505050506040513d602081101561253c57600080fd5b810190808051906020019092919050505061204f565b836155e490919063ffffffff16565b91508080600101915050612429565b5060005b600b805490508110156126bb576126ac61269d600b838154811061259457fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600b84815481106125cc57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561265d57600080fd5b505afa158015612671573d6000803e3d6000fd5b505050506040513d602081101561268757600080fd5b810190808051906020019092919050505061204f565b836155e490919063ffffffff16565b91508080600101915050612574565b5080602181905550807f93bb8edd35984706eee1b92541281f7f62d33c01c5b2ec0929a113603bd21d6660405160405180910390a2807fec691f09f6924b27932253f85caf99bacc30360cc0e50a1cc4d2acc24601446660405160405180910390a250565b60116020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6008818154811061276357600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b3373ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612853576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156128d9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180615f156026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fea8258f2d9ddb679928cf34b78cf645b7feda9acc828e4dd82d014eaae270eba60405160405180910390a380600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b601d6020528060005260406000206000915054906101000a900460ff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612a86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180615f3b6022913960400191505060405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167faa151555690c956fc3ea32f106bb9f119b5237a061eaa8557cff3e51e3792c8d60405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60036020528060005260406000206000915054906101000a900460ff1681565b601d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612c65576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f4e6f7420617070726f766564000000000000000000000000000000000000000081525060200191505060405180910390fd5b612c6d611a24565b811115612ce2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f496e73756666696369656e74207265736572766573000000000000000000000081525060200191505060405180910390fd5b7f00000000000000000000000088536c9b2c4701b8db824e6a16829d5b5eb8444073ffffffffffffffffffffffffffffffffffffffff166340c10f1983836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015612d7357600080fd5b505af1158015612d87573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167ffa8ccab40e7da8146c2304cd0950334fd30a6ba093abe86261aa13911fed849c836040518082815260200191505060405180910390a35050565b60058181548110612e0457600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60158181548110612e4357600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60046020528060005260406000206000915090505481565b60188181548110612e9a57600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60096020528060005260406000206000915054906101000a900460ff1681565b600d6020528060005260406000206000915090505481565b600e8181548110612f1157600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60215481565b60076020528060005260406000206000915090505481565b600f6020528060005260406000206000915054906101000a900460ff1681565b60205481565b600c6020528060005260406000206000915054906101000a900460ff1681565b60176020528060005260406000206000915090505481565b60146020528060005260406000206000915090505481565b601c8181548110612fe457600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806130b65750600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b613128576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f4e6f74206163636570746564000000000000000000000000000000000000000081525060200191505060405180910390fd5b6131553330868673ffffffffffffffffffffffffffffffffffffffff1661573c909392919063ffffffff16565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561326b57600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16613266576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f4e6f7420617070726f766564000000000000000000000000000000000000000081525060200191505060405180910390fd5b61332b565b600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661332a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f4e6f7420617070726f766564000000000000000000000000000000000000000081525060200191505060405180910390fd5b5b6000613337848661204f565b905061334c83826154f890919063ffffffff16565b91507f00000000000000000000000088536c9b2c4701b8db824e6a16829d5b5eb8444073ffffffffffffffffffffffffffffffffffffffff166340c10f1933846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b1580156133df57600080fd5b505af11580156133f3573d6000803e3d6000fd5b5050505061340c816021546155e490919063ffffffff16565b6021819055506021547f93bb8edd35984706eee1b92541281f7f62d33c01c5b2ec0929a113603bd21d6660405160405180910390a28373ffffffffffffffffffffffffffffffffffffffff167f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a158683604051808381526020018281526020019250505060405180910390a2509392505050565b600a6020528060005260406000206000915090505481565b601a6020528060005260406000206000915090505481565b600281815481106134df57600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b7f000000000000000000000000000000000000000000000000000000000000010c81565b601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166135f1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f4e6f7420617070726f766564000000000000000000000000000000000000000081525060200191505060405180910390fd5b600360008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166136b0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f4e6f74206163636570746564000000000000000000000000000000000000000081525060200191505060405180910390fd5b6136dd3330848473ffffffffffffffffffffffffffffffffffffffff1661573c909392919063ffffffff16565b60006136e9828461204f565b905061373d81601b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546154f890919063ffffffff16565b601b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613795816022546154f890919063ffffffff16565b6022819055506137b0816021546155e490919063ffffffff16565b6021819055506021547f93bb8edd35984706eee1b92541281f7f62d33c01c5b2ec0929a113603bd21d6660405160405180910390a28173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fc6d98eecfc9c78ab62c89a82950079b54874749f1f6f24090f7acc758bc2f3098584604051808381526020018281526020019250505060405180910390a3505050565b60166020528060005260406000206000915054906101000a900460ff1681565b7f00000000000000000000000088536c9b2c4701b8db824e6a16829d5b5eb8444081565b60003373ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461395e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561399857600080fd5b600060098111156139a557fe5b8360098111156139b157fe5b1415613a32576139ea7f000000000000000000000000000000000000000000000000000000000000010c436155e490919063ffffffff16565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613f96565b60016009811115613a3f57fe5b836009811115613a4b57fe5b1415613acc57613a847f000000000000000000000000000000000000000000000000000000000000010c436155e490919063ffffffff16565b600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613f95565b60026009811115613ad957fe5b836009811115613ae557fe5b1415613b6657613b1e7f000000000000000000000000000000000000000000000000000000000000010c436155e490919063ffffffff16565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613f94565b60036009811115613b7357fe5b836009811115613b7f57fe5b1415613c1357613bcb613bbc60027f000000000000000000000000000000000000000000000000000000000000010c61566c90919063ffffffff16565b436155e490919063ffffffff16565b601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613f93565b60046009811115613c2057fe5b836009811115613c2c57fe5b1415613cad57613c657f000000000000000000000000000000000000000000000000000000000000010c436155e490919063ffffffff16565b601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613f92565b60056009811115613cba57fe5b836009811115613cc657fe5b1415613d4757613cff7f000000000000000000000000000000000000000000000000000000000000010c436155e490919063ffffffff16565b600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613f91565b60066009811115613d5457fe5b836009811115613d6057fe5b1415613df457613dac613d9d60027f000000000000000000000000000000000000000000000000000000000000010c61566c90919063ffffffff16565b436155e490919063ffffffff16565b601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613f90565b60076009811115613e0157fe5b836009811115613e0d57fe5b1415613e8e57613e467f000000000000000000000000000000000000000000000000000000000000010c436155e490919063ffffffff16565b601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613f8f565b60086009811115613e9b57fe5b836009811115613ea757fe5b1415613f2857613ee07f000000000000000000000000000000000000000000000000000000000000010c436155e490919063ffffffff16565b601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613f8e565b600980811115613f3457fe5b836009811115613f4057fe5b1415613f8457613f797f000000000000000000000000000000000000000000000000000000000000010c436155e490919063ffffffff16565b602081905550613f8d565b60009050613ff4565b5b5b5b5b5b5b5b5b5b826009811115613fa257fe5b7f0e4f2c4b5bc209d509bc3d49348c787fefadc66a79351b470599ac0f5be52eaf83604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a2600190505b92915050565b60136020528060005260406000206000915054906101000a900460ff1681565b60196020528060005260406000206000915054906101000a900460ff1681565b601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166140f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f4e6f7420617070726f766564000000000000000000000000000000000000000081525060200191505060405180910390fd5b7f00000000000000000000000088536c9b2c4701b8db824e6a16829d5b5eb8444073ffffffffffffffffffffffffffffffffffffffff166379cc679033836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561418a57600080fd5b505af115801561419e573d6000803e3d6000fd5b505050506141f481601b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546154f890919063ffffffff16565b601b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061424c816022546154f890919063ffffffff16565b6022819055507f00000000000000000000000088536c9b2c4701b8db824e6a16829d5b5eb8444073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fc6d98eecfc9c78ab62c89a82950079b54874749f1f6f24090f7acc758bc2f3098384604051808381526020018281526020019250505060405180910390a350565b601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601e6020528060005260406000206000915090505481565b60003373ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146143e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561441d57600080fd5b600080600981111561442b57fe5b85600981111561443757fe5b14156145b45761444a60076006866157fd565b15614508576000600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061449f6005856159cd565b614507576005849080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615905080600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061542b565b600160098111156145c157fe5b8560098111156145cd57fe5b141561474a576145e0600a6009866157fd565b1561469e576000600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506146356008856159cd565b61469d576008849080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615905080600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061542a565b6002600981111561475757fe5b85600981111561476357fe5b14156148e05761477660046003866157fd565b15614834576000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506147cb6002856159cd565b614833576002849080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615905080600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550615429565b600360098111156148ed57fe5b8560098111156148f957fe5b1415614ad95761490c60146013866157fd565b15614a2d576012849080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000601460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506149c46012856159cd565b614a2c576012849080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5b601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615905080601360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550615428565b60046009811115614ae657fe5b856009811115614af257fe5b1415614cd257614b056010600f866157fd565b15614c2657600e849080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000601060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614bbd600e856159cd565b614c2557600e849080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5b600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615905080600f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550615427565b60056009811115614cdf57fe5b856009811115614ceb57fe5b1415614ee657614cfe600d600c866157fd565b15614dbc576000600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614d53600b856159cd565b614dbb57600b849080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5b600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615905080600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555082601160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550615426565b60066009811115614ef357fe5b856009811115614eff57fe5b141561507c57614f1260176016866157fd565b15614fd0576000601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614f676015856159cd565b614fcf576015849080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5b601660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615905080601660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550615425565b6007600981111561508957fe5b85600981111561509557fe5b1415615212576150a8601a6019866157fd565b15615166576000601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506150fd6018856159cd565b615165576018849080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5b601960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615905080601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550615424565b6008600981111561521f57fe5b85600981111561522b57fe5b14156153a85761523e601e601d866157fd565b156152fc576000601e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550615293601c856159cd565b6152fb57601c849080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5b601d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615905080601d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550615423565b6009808111156153b457fe5b8560098111156153c057fe5b141561541857600060208190555083601f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050615422565b6000915050615494565b5b5b5b5b5b5b5b5b5b84600981111561543757fe5b7f0dcacb7e392f3d6a216ed2660e3dcfd40b7793d33591db2ba185a6b8e44fc4778583604051808373ffffffffffffffffffffffffffffffffffffffff16815260200182151581526020019250505060405180910390a260019150505b9392505050565b60225481565b600b81815481106154b157600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60106020528060005260406000206000915090505481565b600061553a83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250615a6e565b905092915050565b6155df8363a9059cbb60e01b8484604051602401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050615b2e565b505050565b600080828401905083811015615662576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b60008083141561567f57600090506156ec565b600082840290508284828161569057fe5b04146156e7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180615f5d6021913960400191505060405180910390fd5b809150505b92915050565b600061573483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250615c1d565b905092915050565b6157f7846323b872dd60e01b858585604051602401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050615b2e565b50505050565b60008260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166159c15760008460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541415615904576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f4d7573742071756575650000000000000000000000000000000000000000000081525060200191505060405180910390fd5b438460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156159b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f5175657565206e6f74206578706972656400000000000000000000000000000081525060200191505060405180910390fd5b600190506159c6565b600090505b9392505050565b600080600090505b8380549050811015615a62578273ffffffffffffffffffffffffffffffffffffffff16848281548110615a0457fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415615a55576001915050615a68565b80806001019150506159d5565b50600090505b92915050565b6000838311158290615b1b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015615ae0578082015181840152602081019050615ac5565b50505050905090810190601f168015615b0d5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b6060615b90826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16615ce39092919063ffffffff16565b9050600081511115615c1857808060200190516020811015615bb157600080fd5b8101908080519060200190929190505050615c17576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180615f7e602a913960400191505060405180910390fd5b5b505050565b60008083118290615cc9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015615c8e578082015181840152602081019050615c73565b50505050905090810190601f168015615cbb5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581615cd557fe5b049050809150509392505050565b6060615cf28484600085615cfb565b90509392505050565b6060615d0685615f01565b615d78576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000081525060200191505060405180910390fd5b600060608673ffffffffffffffffffffffffffffffffffffffff1685876040518082805190602001908083835b60208310615dc85780518252602082019150602081019050602083039250615da5565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114615e2a576040519150601f19603f3d011682016040523d82523d6000602084013e615e2f565b606091505b50915091508115615e44578092505050615ef9565b600081511115615e575780518082602001fd5b836040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015615ebe578082015181840152602081019050615ea3565b50505050905090810190601f168015615eeb5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b949350505050565b600080823b90506000811191505091905056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734f776e61626c653a206d757374206265206e6577206f776e657220746f2070756c6c536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f775361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a2646970667358221220d7121ed90e38fbe795407dde28a87d2bc150dedba8ddb1d716b8c99e6216dcc064736f6c63430007050033

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

00000000000000000000000088536c9b2c4701b8db824e6a16829d5b5eb844400000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000853d955acef822db058eb8505911ed77f175b99e000000000000000000000000000000000000000000000000000000000000010c

-----Decoded View---------------
Arg [0] : _USV (address): 0x88536C9B2C4701b8dB824e6A16829D5B5Eb84440
Arg [1] : _DAI (address): 0x6B175474E89094C44Da98b954EedeAC495271d0F
Arg [2] : _Frax (address): 0x853d955aCEf822Db058eb8505911ED77F175b99e
Arg [3] : _blocksNeededForQueue (uint256): 268

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 00000000000000000000000088536c9b2c4701b8db824e6a16829d5b5eb84440
Arg [1] : 0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f
Arg [2] : 000000000000000000000000853d955acef822db058eb8505911ed77f175b99e
Arg [3] : 000000000000000000000000000000000000000000000000000000000000010c


Deployed Bytecode Sourcemap

6754:19212:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12039:581;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;9193:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;4143:159;;;:::i;:::-;;9905:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;15074:626;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;16233:146;;;:::i;:::-;;;;;;;;;;;;;;;;;;;8211:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;12765:859;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;17363:462;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;16532:668;;;:::i;:::-;;9090:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;8364:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;4310:261;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;3916:90;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;10055:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;4583:221;;;:::i;:::-;;7969:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;15781:343;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;8114:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;9437;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;8024:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;9687:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;8459:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;8742:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;8834:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;10295:25;;;:::i;:::-;;;;;;;;;;;;;;;;;;;8270:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;8933:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;10228:21;;;:::i;:::-;;;;;;;;;;;;;;;;;;;8685:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;9593:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;9345:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;9961:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;11013:875;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;8516:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;9823:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;7894:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;7843:42;;;:::i;:::-;;;;;;;;;;;;;;;;;;;13791:631;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;9534:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;7808:28;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;18001:1785;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;9288:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;9774:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;14553:376;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;10202:19;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;10111:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;19996:4835;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;10360:21;;;:::i;:::-;;;;;;;;;;;;;;;;;;;8608:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;8994:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;12039:581;12118:14;:24;12134:6;12118:24;;;;;;;;;;;;;;;;;;;;;;;;;12109:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12259:4;12225:38;;:16;:30;12243:10;12225:30;;;;;;;;;;;;;;;;;;;;;;;;;:38;;;12216:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12294:10;12307:26;12316:6;12324:7;12307;:26::i;:::-;12294:39;;12355:3;12344:25;;;12371:10;12383:5;12344:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12419:26;12438:5;12419:13;;:17;;:26;;;;:::i;:::-;12403:13;:42;;;;12478:13;;12461:32;;;;;;;;;;12506:52;12537:10;12549:7;12514:6;12506:29;;;;:52;;;;;:::i;:::-;12588:6;12576:36;;;12596:7;12605:5;12576:36;;;;;;;;;;;;;;;;;;;;;;;;12039:581;;;:::o;9193:32::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;4143:159::-;4067:10;4057:20;;:6;;;;;;;;;;:20;;;4048:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4260:1:::1;4227:37;;4244:6;::::0;::::1;;;;;;;;4227:37;;;;;;;;;;;;4292:1;4275:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;4143:159::o:0;9905:47::-;;;;;;;;;;;;;;;;;:::o;15074:626::-;15146:16;:26;15164:6;15146:26;;;;;;;;;;;;;;;;;;;;;;;;;15142:209;;;15199:18;:32;15219:10;15199:32;;;;;;;;;;;;;;;;;;;;;;;;;15190:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15142:209;;;15291:16;:30;15309:10;15291:30;;;;;;;;;;;;;;;;;;;;;;;;;15282:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15142:209;15363:10;15376:24;15384:6;15392:7;15376;:24::i;:::-;15363:37;;15429:16;:14;:16::i;:::-;15420:5;:25;;15411:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15501:26;15520:5;15501:13;;:17;;:26;;;;:::i;:::-;15485:13;:42;;;;15560:13;;15543:32;;;;;;;;;;15588:52;15619:10;15631:7;15596:6;15588:29;;;;:52;;;;;:::i;:::-;15675:6;15658:34;;;15683:7;15658:34;;;;;;;;;;;;;;;;;;15074:626;;;:::o;16233:146::-;16281:4;16306:65;16325:44;16358:9;;16333:3;16325:25;;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:31;;:44;;;;:::i;:::-;16306:13;;:17;;:65;;;;:::i;:::-;16299:72;;16233:146;:::o;8211:52::-;;;;;;;;;;;;;;;;;;;;;;:::o;12765:859::-;12845:8;:22;12855:10;12845:22;;;;;;;;;;;;;;;;;;;;;;;;;12836:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12905:14;:24;12921:6;12905:24;;;;;;;;;;;;;;;;;;;;;;;;;12896:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12960:10;12973:26;12982:6;12990:7;12973;:26::i;:::-;12960:39;;13012:16;13039:4;;;;;;;;;;;13031:24;;;13057:10;13031:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13012:57;;13117:18;13138:46;13155:13;:27;13170:10;13155:27;;;;;;;;;;;;;;;;13138:11;:15;;:46;;;;:::i;:::-;13117:67;;13213:13;13204:5;:22;;13195:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13293:40;13326:5;13293:13;:27;13308:10;13293:27;;;;;;;;;;;;;;;;:31;;:40;;;;:::i;:::-;13263:13;:27;13278:10;13263:27;;;;;;;;;;;;;;;:70;;;;13356:22;13371:5;13356:9;;:13;;:22;;;;:::i;:::-;13344:9;:34;;;;13407:26;13426:5;13407:13;;:17;;:26;;;;:::i;:::-;13391:13;:42;;;;13466:13;;13449:32;;;;;;;;;;13502:6;13494:25;;;13521:10;13533:7;13494:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13592:6;13568:48;;13580:10;13568:48;;;13600:7;13609:5;13568:48;;;;;;;;;;;;;;;;;;;;;;;;12765:859;;;;;:::o;17363:462::-;17434:11;17464:14;:24;17480:6;17464:24;;;;;;;;;;;;;;;;;;;;;;;;;17459:359;;;17568:86;17633:6;17625:25;;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17619:33;;:2;:33;17568:45;17595:3;17587:22;;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17581:30;;:2;:30;17568:7;:11;;:45;;;;:::i;:::-;:49;;:86;;;;:::i;:::-;17559:95;;17459:359;;;17677:16;:26;17695:6;17677:26;;;;;;;;;;;;;;;;;;;;;;;;;17672:146;;;17749:16;:26;17767:6;17749:26;;;;;;;;;;;;;;;;;;;;;;;;;17730:57;;;17789:6;17797:7;17730:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17721:85;;17672:146;17459:359;17363:462;;;;:::o;16532:668::-;4067:10;4057:20;;:6;;;;;;;;;;:20;;;4048:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16591:13:::1;16620:6:::0;16629:1:::1;16620:10;;16615:221;16636:13;:20;;;;16632:1;:24;16615:221;;;16690:134;16723:86;16732:13;16747:1;16732:18;;;;;;;;;;;;;;;;;;;;;;;;;16760:13;16775:1;16760:18;;;;;;;;;;;;;;;;;;;;;;;;;16752:38;;;16800:4;16752:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;16723:7;:86::i;:::-;16690:8;:12;;:134;;;;:::i;:::-;16679:145;;16658:3;;;;;;;16615:221;;;;16851:6;16846:226;16867:15;:22;;;;16863:1;:26;16846:226;;;16923:137;16955:90;16964:15;16981:1;16964:20;;;;;;;;;;;;;;;;;;;;;;;;;16994:15;17011:1;16994:20;;;;;;;;;;;;;;;;;;;;;;;;;16986:40;;;17036:4;16986:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;16955:7;:90::i;:::-;16923:8;:12;;:137;;;;:::i;:::-;16912:148;;16891:3;;;;;;;16846:226;;;;17098:8;17082:13;:24;;;;17139:8;17122:27;;;;;;;;;;17182:8;17165:27;;;;;;;;;;4126:1;16532:668::o:0;9090:53::-;;;;;;;;;;;;;;;;;;;;;;:::o;8364:32::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;4310:261::-;4067:10;4057:20;;:6;;;;;;;;;;:20;;;4048:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4434:1:::1;4413:23;;:9;:23;;;;4404:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4520:9;4495:36;;4512:6;::::0;::::1;;;;;;;;4495:36;;;;;;;;;;;;4554:9;4542;;:21;;;;;;;;;;;;;;;;;;4310:261:::0;:::o;3916:90::-;3965:7;3992:6;;;;;;;;;;;3985:13;;3916:90;:::o;10055:49::-;;;;;;;;;;;;;;;;;;;;;;:::o;4583:221::-;4667:9;;;;;;;;;;;4653:23;;:10;:23;;;4644:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4756:9;;;;;;;;;;;4731:36;;4748:6;;;;;;;;;;4731:36;;;;;;;;;;;;4787:9;;;;;;;;;;;4778:6;;:18;;;;;;;;;;;;;;;;;;4583:221::o;7969:48::-;;;;;;;;;;;;;;;;;;;;;;:::o;15781:343::-;15867:15;:29;15884:10;15867:29;;;;;;;;;;;;;;;;;;;;;;;;;15858:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15945:16;:14;:16::i;:::-;15934:7;:27;;15925:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16017:3;16001:26;;;16029:10;16041:7;16001:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16095:10;16068:48;;16083:10;16068:48;;;16107:7;16068:48;;;;;;;;;;;;;;;;;;15781:343;;:::o;8114:34::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;9437:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;8024:51::-;;;;;;;;;;;;;;;;;:::o;9687:24::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;8459:50::-;;;;;;;;;;;;;;;;;;;;;;:::o;8742:53::-;;;;;;;;;;;;;;;;;:::o;8834:36::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;10295:25::-;;;;:::o;8270:55::-;;;;;;;;;;;;;;;;;:::o;8933:54::-;;;;;;;;;;;;;;;;;;;;;;:::o;10228:21::-;;;;:::o;8685:50::-;;;;;;;;;;;;;;;;;;;;;;:::o;9593:55::-;;;;;;;;;;;;;;;;;:::o;9345:53::-;;;;;;;;;;;;;;;;;:::o;9961:31::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;11013:875::-;11095:10;11128:14;:24;11144:6;11128:24;;;;;;;;;;;;;;;;;;;;;;;;;:54;;;;11156:16;:26;11174:6;11156:26;;;;;;;;;;;;;;;;;;;;;;;;;11128:54;11119:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11211:71;11246:10;11266:4;11273:7;11219:6;11211:33;;;;:71;;;;;;:::i;:::-;11300:14;:24;11316:6;11300:24;;;;;;;;;;;;;;;;;;;;;;;;;11295:212;;;11351:18;:32;11371:10;11351:32;;;;;;;;;;;;;;;;;;;;;;;;;11342:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11295:212;;;11443:20;:34;11465:10;11443:34;;;;;;;;;;;;;;;;;;;;;;;;;11434:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11295:212;11519:10;11532:24;11540:6;11548:7;11532;:24::i;:::-;11519:37;;11648:20;11659:7;11648:5;:9;;:20;;;;:::i;:::-;11640:28;;11695:3;11679:26;;;11707:10;11719:5;11679:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11755:26;11774:5;11755:13;;:17;;:26;;;;:::i;:::-;11739:13;:42;;;;11814:13;;11797:32;;;;;;;;;;11856:6;11847:33;;;11864:7;11873:5;11847:33;;;;;;;;;;;;;;;;;;;;;;;;11013:875;;;;;;:::o;8516:53::-;;;;;;;;;;;;;;;;;:::o;9823:45::-;;;;;;;;;;;;;;;;;:::o;7894:30::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;7843:42::-;;;:::o;13791:631::-;13882:8;:22;13892:10;13882:22;;;;;;;;;;;;;;;;;;;;;;;;;13873:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13942:14;:24;13958:6;13942:24;;;;;;;;;;;;;;;;;;;;;;;;;13933:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13997:71;14032:10;14052:4;14059:7;14005:6;13997:33;;;;:71;;;;;;:::i;:::-;14081:10;14094:26;14103:6;14111:7;14094;:26::i;:::-;14081:39;;14161:40;14194:5;14161:13;:27;14176:10;14161:27;;;;;;;;;;;;;;;;:31;;:40;;;;:::i;:::-;14131:13;:27;14146:10;14131:27;;;;;;;;;;;;;;;:70;;;;14224:22;14239:5;14224:9;;:13;;:22;;;;:::i;:::-;14212:9;:34;;;;14275:26;14294:5;14275:13;;:17;;:26;;;;:::i;:::-;14259:13;:42;;;;14334:13;;14317:32;;;;;;;;;;14390:6;14367:47;;14378:10;14367:47;;;14398:7;14407:5;14367:47;;;;;;;;;;;;;;;;;;;;;;;;13791:631;;;:::o;9534:52::-;;;;;;;;;;;;;;;;;;;;;;:::o;7808:28::-;;;:::o;18001:1785::-;18089:4;4067:10;4057:20;;:6;;;;;;;;;;:20;;;4048:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18136:1:::1;18116:22;;:8;:22;;;;18107:33;;;::::0;::::1;;18169:25;18156:38;;;;;;;;:9;:38;;;;;;;;;18151:1552;;;18253:40;18271:20;18253:12;:16;;:40;;;;:::i;:::-;18217:21;:33;18240:8;18217:33;;;;;;;;;;;;;;;:76;;;;18151:1552;;;18329:23;18316:36;;;;;;;;:9;:36;;;;;;;;;18311:1392;;;18409:40;18427:20;18409:12;:16;;:40;;;;:::i;:::-;18375:19;:31;18396:8;18375:31;;;;;;;;;;;;;;;:74;;;;18311:1392;;;18485:21;18472:34;;;;;;;;:9;:34;;;;;;;;;18467:1236;;;18561:40;18579:20;18561:12;:16;;:40;;;;:::i;:::-;18529:17;:29;18548:8;18529:29;;;;;;;;;;;;;;;:72;;;;18467:1236;;;18637:23;18624:36;;;;;;;;:9;:36;;;;;;;;;18619:1084;;;18717:49;18735:29;18761:1;18735:20;:24;;:29;;;;:::i;:::-;18717:12;:16;;:49;;;;:::i;:::-;18683:19;:31;18704:8;18683:31;;;;;;;;;;;;;;;:83;;;;18619:1084;;;18802:27;18789:40;;;;;;;;:9;:40;;;;;;;;;18784:919;;;18890:40;18908:20;18890:12;:16;;:40;;;;:::i;:::-;18852:23;:35;18877:8;18852:35;;;;;;;;;;;;;;;:78;;;;18784:919;;;18966:23;18953:36;;;;;;;;:9;:36;;;;;;;;;18948:755;;;19046:40;19064:20;19046:12;:16;;:40;;;;:::i;:::-;19012:19;:31;19033:8;19012:31;;;;;;;;;;;;;;;:74;;;;18948:755;;;19122:25;19109:38;;;;;;;;:9;:38;;;;;;;;;19104:599;;;19206:49;19224:29;19250:1;19224:20;:24;;:29;;;;:::i;:::-;19206:12;:16;;:49;;;;:::i;:::-;19170:21;:33;19193:8;19170:33;;;;;;;;;;;;;;;:85;;;;19104:599;;;19291:15;19278:28;;;;;;;;:9;:28;;;;;;;;;19273:430;;;19355:40;19373:20;19355:12;:16;;:40;;;;:::i;:::-;19329:11;:23;19342:8;19329:23;;;;;;;;;;;;;;;:66;;;;19273:430;;;19431:22;19418:35;;;;;;;;:9;:35;;;;;;;;;19413:290;;;19509:40;19527:20;19509:12;:16;;:40;;;;:::i;:::-;19476:18;:30;19496:8;19476:30;;;;;;;;;;;;;;;:73;;;;19413:290;;;19585:13;19572:26:::0;::::1;;;;;;;:9;:26;;;;;;;;;19567:136;;;19633:40;19651:20;19633:12;:16;;:40;;;;:::i;:::-;19621:9;:52;;;;19567:136;;;19698:5;19691:12;;;;19567:136;19413:290;19273:430;19104:599;18948:755;18784:919;18619:1084;18467:1236;18311:1392;18151:1552;19735:9;19721:35;;;;;;;;;19746:8;19721:35;;;;;;;;;;;;;;;;;;;;19774:4;19767:11;;4126:1;18001:1785:::0;;;;:::o;9288:50::-;;;;;;;;;;;;;;;;;;;;;;:::o;9774:42::-;;;;;;;;;;;;;;;;;;;;;;:::o;14553:376::-;14624:8;:22;14634:10;14624:22;;;;;;;;;;;;;;;;;;;;;;;;;14615:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14688:3;14677:25;;;14704:10;14716:7;14677:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14768:42;14801:7;14768:13;:27;14783:10;14768:27;;;;;;;;;;;;;;;;:31;;:42;;;;:::i;:::-;14738:13;:27;14753:10;14738:27;;;;;;;;;;;;;;;:72;;;;14833:24;14848:7;14833:9;;:13;;:24;;;;:::i;:::-;14821:9;:36;;;;14898:3;14875:46;;14886:10;14875:46;;;14903:7;14912;14875:46;;;;;;;;;;;;;;;;;;;;;;;;14553:376;:::o;10202:19::-;;;;;;;;;;;;;:::o;10111:52::-;;;;;;;;;;;;;;;;;:::o;19996:4835::-;20106:4;4067:10;4057:20;;:6;;;;;;;;;;:20;;;4048:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20153:1:::1;20133:22;;:8;:22;;;;20124:33;;;::::0;::::1;;20168:11;20208:25:::0;20195:38:::1;;;;;;;;:9;:38;;;;;;;;;20190:4547;;;20261:67;20275:21;20298:18;20318:8;20261:12;:67::i;:::-;20256:293;;;20386:1;20350:21;:33;20373:8;20350:33;;;;;;;;;;;;;;;:37;;;;20411:43;20425:17;20444:8;20411:12;:43::i;:::-;20406:128;;20480:17;20504:8;20480:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20406:128;20256:293;20573:18;:30;20593:8;20573:30;;;;;;;;;;;;;;;;;;;;;;;;;20572:31;20563:40;;20651:6;20618:18;:30;20638:8;20618:30;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;20190:4547;;;20707:23;20694:36;;;;;;;;:9;:36;;;;;;;;;20689:4048;;;20758:63;20772:19;20793:16;20811:8;20758:12;:63::i;:::-;20753:283;;;20877:1;20843:19;:31;20864:8;20843:31;;;;;;;;;;;;;;;:35;;;;20902:41;20916:15;20933:8;20902:12;:41::i;:::-;20897:124;;20969:15;20991:8;20969:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20897:124;20753:283;21060:16;:28;21078:8;21060:28;;;;;;;;;;;;;;;;;;;;;;;;;21059:29;21050:38;;21134:6;21103:16;:28;21121:8;21103:28;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;20689:4048;;;21178:21;21165:34;;;;;;;;:9;:34;;;;;;;;;21160:3577;;;21227:59;21241:17;21260:14;21276:8;21227:12;:59::i;:::-;21222:273;;;21340:1;21308:17;:29;21327:8;21308:29;;;;;;;;;;;;;;;:33;;;;21365:39;21379:13;21394:8;21365:12;:39::i;:::-;21360:120;;21430:13;21450:8;21430:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21360:120;21222:273;21519:14;:26;21535:8;21519:26;;;;;;;;;;;;;;;;;;;;;;;;;21518:27;21509:36;;21589:6;21560:14;:26;21576:8;21560:26;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;21160:3577;;;21633:23;21620:36;;;;;;;;:9;:36;;;;;;;;;21615:3122;;;21684:63;21698:19;21719:16;21737:8;21684:12;:63::i;:::-;21679:334;;;21769:15;21791:8;21769:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21854:1;21820:19;:31;21841:8;21820:31;;;;;;;;;;;;;;;:35;;;;21879:41;21893:15;21910:8;21879:12;:41::i;:::-;21874:124;;21946:15;21968:8;21946:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21874:124;21679:334;22037:16;:28;22055:8;22037:28;;;;;;;;;;;;;;;;;;;;;;;;;22036:29;22027:38;;22111:6;22080:16;:28;22098:8;22080:28;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;21615:3122;;;22155:27;22142:40;;;;;;;;:9;:40;;;;;;;;;22137:2600;;;22210:71;22224:23;22249:20;22271:8;22210:12;:71::i;:::-;22205:358;;;22303:19;22329:8;22303:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22396:1;22358:23;:35;22383:8;22358:35;;;;;;;;;;;;;;;:39;;;;22421:45;22435:19;22456:8;22421:12;:45::i;:::-;22416:132;;22492:19;22518:8;22492:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22416:132;22205:358;22587:20;:32;22609:8;22587:32;;;;;;;;;;;;;;;;;;;;;;;;;22586:33;22577:42;;22669:6;22634:20;:32;22656:8;22634:32;;;;;;;;;;;;;;;;:41;;;;;;;;;;;;;;;;;;22137:2600;;;22713:23;22700:36;;;;;;;;:9;:36;;;;;;;;;22695:2042;;;22764:63;22778:19;22799:16;22817:8;22764:12;:63::i;:::-;22759:283;;;22883:1;22849:19;:31;22870:8;22849:31;;;;;;;;;;;;;;;:35;;;;22908:41;22922:15;22939:8;22908:12;:41::i;:::-;22903:124;;22975:15;22997:8;22975:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22903:124;22759:283;23066:16;:28;23084:8;23066:28;;;;;;;;;;;;;;;;;;;;;;;;;23065:29;23056:38;;23140:6;23109:16;:28;23127:8;23109:28;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;23192:11;23161:16;:28;23179:8;23161:28;;;;;;;;;;;;;;;;:42;;;;;;;;;;;;;;;;;;22695:2042;;;23241:25;23228:38;;;;;;;;:9;:38;;;;;;;;;23223:1514;;;23294:67;23308:21;23331:18;23351:8;23294:12;:67::i;:::-;23289:293;;;23419:1;23383:21;:33;23406:8;23383:33;;;;;;;;;;;;;;;:37;;;;23444:43;23458:17;23477:8;23444:12;:43::i;:::-;23439:128;;23513:17;23537:8;23513:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23439:128;23289:293;23606:18;:30;23626:8;23606:30;;;;;;;;;;;;;;;;;;;;;;;;;23605:31;23596:40;;23684:6;23651:18;:30;23671:8;23651:30;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;23223:1514;;;23728:15;23715:28;;;;;;;;:9;:28;;;;;;;;;23710:1027;;;23771:47;23785:11;23798:8;23808;23771:12;:47::i;:::-;23766:243;;;23866:1;23840:11;:23;23853:8;23840:23;;;;;;;;;;;;;;;:27;;;;23891:33;23905:7;23914:8;23891:12;:33::i;:::-;23886:108;;23950:7;23964:8;23950:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23886:108;23766:243;24033:8;:20;24043:8;24033:20;;;;;;;;;;;;;;;;;;;;;;;;;24032:21;24023:30;;24091:6;24068:8;:20;24078:8;24068:20;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;23710:1027;;;24135:22;24122:35;;;;;;;;:9;:35;;;;;;;;;24117:620;;;24185:61;24199:18;24219:15;24236:8;24185:12;:61::i;:::-;24180:278;;;24301:1;24268:18;:30;24288:8;24268:30;;;;;;;;;;;;;;;:34;;;;24326:40;24340:14;24356:8;24326:12;:40::i;:::-;24321:122;;24392:14;24413:8;24392:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24321:122;24180:278;24482:15;:27;24499:8;24482:27;;;;;;;;;;;;;;;;;;;;;;;;;24481:28;24472:37;;24554:6;24524:15;:27;24541:8;24524:27;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;24117:620;;;24598:13;24585:26:::0;::::1;;;;;;;:9;:26;;;;;;;;;24580:157;;;24646:1;24634:9;:13;;;;24669:8;24662:4;;:15;;;;;;;;;;;;;;;;;;24701:4;24692:13;;24580:157;;;24732:5;24725:12;;;;;24580:157;24117:620;23710:1027;23223:1514;22695:2042;22137:2600;21615:3122;21160:3577;20689:4048;20190:4547;24772:9;24755:46;;;;;;;;;24783:8;24793:6;24755:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;24819:4;24812:11;;;4126:1;19996:4835:::0;;;;;:::o;10360:21::-;;;;:::o;8608:32::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;8994:57::-;;;;;;;;;;;;;;;;;:::o;288:136::-;346:7;373:43;377:1;380;373:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;366:50;;288:136;;;;:::o;5561:177::-;5644:86;5664:5;5694:23;;;5719:2;5723:5;5671:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5644:19;:86::i;:::-;5561:177;;;:::o;99:181::-;157:7;177:9;193:1;189;:5;177:17;;218:1;213;:6;;205:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;271:1;264:8;;;99:181;;;;:::o;632:250::-;690:7;719:1;714;:6;710:47;;;744:1;737:8;;;;710:47;769:9;785:1;781;:5;769:17;;814:1;809;805;:5;;;;;;:10;797:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;873:1;866:8;;;632:250;;;;;:::o;890:132::-;948:7;975:39;979:1;982;975:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;968:46;;890:132;;;;:::o;5746:205::-;5847:96;5867:5;5897:27;;;5926:4;5932:2;5936:5;5874:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5847:19;:96::i;:::-;5746:205;;;;:::o;25079:438::-;25268:4;25292:7;:19;25301:8;25292:19;;;;;;;;;;;;;;;;;;;;;;;;;25286:210;;25360:1;25338:6;:18;25346:8;25338:18;;;;;;;;;;;;;;;;:23;;25329:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25423:12;25401:6;:18;25409:8;25401:18;;;;;;;;;;;;;;;;:34;;25392:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25480:4;25473:11;;;;25286:210;25504:5;25497:12;;25079:438;;;;;;:::o;25686:277::-;25775:4;25798:6;25807:1;25798:10;;25793:140;25814:5;:12;;;;25810:1;:16;25793:140;;;25867:6;25853:20;;:5;25860:1;25853:10;;;;;;;;;;;;;;;;;;;;;;;;;:20;;;25849:73;;;25902:4;25895:11;;;;;25849:73;25828:3;;;;;;;25793:140;;;;25950:5;25943:12;;25686:277;;;;;:::o;432:192::-;518:7;551:1;546;:6;;554:12;538:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;578:9;594:1;590;:5;578:17;;615:1;608:8;;;432:192;;;;;:::o;5959:418::-;6040:23;6066:69;6094:4;6066:69;;;;;;;;;;;;;;;;;6074:5;6066:27;;;;:69;;;;;:::i;:::-;6040:95;;6170:1;6150:10;:17;:21;6146:224;;;6292:10;6281:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6273:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6146:224;5959:418;;;:::o;1030:189::-;1116:7;1148:1;1144;:5;1151:12;1136:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1175:9;1191:1;1187;:5;;;;;;1175:17;;1210:1;1203:8;;;1030:189;;;;;:::o;1679:196::-;1782:12;1814:53;1837:6;1845:4;1851:1;1854:12;1814:22;:53::i;:::-;1807:60;;1679:196;;;;;:::o;1883:817::-;2013:12;2046:18;2057:6;2046:10;:18::i;:::-;2038:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2172:12;2186:23;2213:6;:11;;2233:8;2244:4;2213:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2171:78;;;;2264:7;2260:433;;;2295:10;2288:17;;;;;;2260:433;2362:1;2342:10;:17;:21;2338:344;;;2510:10;2504:17;2571:15;2558:10;2554:2;2550:19;2543:44;2458:148;2653:12;2646:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1883:817;;;;;;;:::o;1249:422::-;1309:4;1517:12;1628:7;1616:20;1608:28;;1662:1;1655:4;:8;1648:15;;;1249:422;;;:::o

Swarm Source

ipfs://d7121ed90e38fbe795407dde28a87d2bc150dedba8ddb1d716b8c99e6216dcc0

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

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

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.