ETH Price: $3,254.91 (+2.47%)
Gas: 2 Gwei

Contract

0x5b2D6FA99086b3d17Fa182D812441acfBfa57a51
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Withdraw201204832024-06-18 18:38:5938 days ago1718735939IN
0x5b2D6FA9...fBfa57a51
0 ETH0.000782498.69644321
Deposit Tokens T...200232642024-06-05 4:33:4751 days ago1717562027IN
0x5b2D6FA9...fBfa57a51
0 ETH0.000651975.91361281
Withdraw200232532024-06-05 4:31:3551 days ago1717561895IN
0x5b2D6FA9...fBfa57a51
0 ETH0.000474296.5079788
Deposit Tokens T...199965602024-06-01 11:06:2355 days ago1717239983IN
0x5b2D6FA9...fBfa57a51
0 ETH0.000522614.83115408
Withdraw199515792024-05-26 4:10:5961 days ago1716696659IN
0x5b2D6FA9...fBfa57a51
0 ETH0.00024532.72622019
Deposit Tokens T...198858672024-05-16 23:38:1170 days ago1715902691IN
0x5b2D6FA9...fBfa57a51
0 ETH0.000409953.71836934
Withdraw198854422024-05-16 22:12:4770 days ago1715897567IN
0x5b2D6FA9...fBfa57a51
0 ETH0.000257173.52880405
Withdraw198752172024-05-15 11:55:3572 days ago1715774135IN
0x5b2D6FA9...fBfa57a51
0 ETH0.000375055.14624458
Withdraw196385562024-04-12 9:12:59105 days ago1712913179IN
0x5b2D6FA9...fBfa57a51
0 ETH0.0017446519.38955425
Withdraw196339182024-04-11 17:38:47106 days ago1712857127IN
0x5b2D6FA9...fBfa57a51
0 ETH0.0020040222.27219237
Withdraw196241662024-04-10 8:53:59107 days ago1712739239IN
0x5b2D6FA9...fBfa57a51
0 ETH0.0012445513.83160849
Withdraw193955002024-03-09 5:37:47139 days ago1709962667IN
0x5b2D6FA9...fBfa57a51
0 ETH0.0011113741.67273967
Withdraw193955002024-03-09 5:37:47139 days ago1709962667IN
0x5b2D6FA9...fBfa57a51
0 ETH0.0011113741.67273967
Withdraw193955002024-03-09 5:37:47139 days ago1709962667IN
0x5b2D6FA9...fBfa57a51
0 ETH0.0037496741.67273967
Deposit Tokens T...193925622024-03-08 19:33:35140 days ago1709926415IN
0x5b2D6FA9...fBfa57a51
0 ETH0.0064006758.0559752
Withdraw193768362024-03-06 14:49:59142 days ago1709736599IN
0x5b2D6FA9...fBfa57a51
0 ETH0.00845635116.03278791
Withdraw193664092024-03-05 3:54:11143 days ago1709610851IN
0x5b2D6FA9...fBfa57a51
0 ETH0.0076894985.45874206
Deposit Tokens T...193301292024-02-29 2:13:47148 days ago1709172827IN
0x5b2D6FA9...fBfa57a51
0 ETH0.0049402844.80983584
Withdraw193293402024-02-28 23:35:11148 days ago1709163311IN
0x5b2D6FA9...fBfa57a51
0 ETH0.0034628947.51570073
Deposit Tokens T...193238102024-02-28 5:00:11149 days ago1709096411IN
0x5b2D6FA9...fBfa57a51
0 ETH0.0045425341.20658548
Deposit Tokens T...192946862024-02-24 3:13:23153 days ago1708744403IN
0x5b2D6FA9...fBfa57a51
0 ETH0.0030464327.02323753
Withdraw192882742024-02-23 5:41:59154 days ago1708666919IN
0x5b2D6FA9...fBfa57a51
0 ETH0.0025228334.61676957
Withdraw192550812024-02-18 13:47:47159 days ago1708264067IN
0x5b2D6FA9...fBfa57a51
0 ETH0.0013642318.71911507
Withdraw192366492024-02-15 23:37:59161 days ago1708040279IN
0x5b2D6FA9...fBfa57a51
0 ETH0.0022217824.69229545
Withdraw191885662024-02-09 5:43:11168 days ago1707457391IN
0x5b2D6FA9...fBfa57a51
0 ETH0.0043118647.92084675
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:
CoinMergeStaking

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license
/**
 *Submitted for verification at Etherscan.io on 2023-03-12
*/

// SPDX-License-Identifier: UNLICENSED
pragma solidity >=0.7.0 <0.9.0;

interface ERC20 {
    function transfer(address _recipient, uint256 _amount) external returns (bool);
    function transferFrom(address _sender, address _recipient, uint256 _amount) external returns (bool);
    function decimals() external view returns (uint8);
}

contract CoinMergeStaking {
    event Stake(address Stakee, address Token, uint256 Amount);
    event Fund(address Token, uint256 Amount);
    event Restake(address Stake, address Token);
    event Withdraw(address Stakee, address Token, uint256 Amount);
    event UpdateRate(address Token, uint256 PayoutAmount, uint256 MinimumStake, uint256 Interval);
    event NewTokenRequest(address Token);

    mapping(address => bool) m_Adjustable;
    mapping(address => uint256) m_Rates;
    mapping(address => uint256) m_Denoms;
    mapping(address => uint256) m_Intervals;
    mapping(address => uint256) m_Pools;
    mapping(address => address) m_Admins;
    mapping(address => uint256) m_Fees;
    mapping(address => uint256) m_FeeBalances;
    mapping(address => mapping(address => uint256)) m_Balances;
    mapping(address => mapping(address => uint256)) m_Deposits;
    mapping(address => mapping(address => uint256)) m_Timestamps;
    mapping(address => mapping(address => uint256)) m_Earnings;
    mapping(address => mapping(address => uint256[])) m_ItemizedEarnings;
    mapping(address => mapping(address => uint256)) m_Requests;

    bool m_Locked = false;
    address m_Owner;
    uint256 m_NativeFee;

    modifier Lock {
        m_Locked = true;
        _;
        m_Locked = false;
    }
    constructor(){
        m_Owner = msg.sender;
    }
    function viewStakeBalance(address _token) external view returns (uint256) {
        return m_Balances[msg.sender][_token];
    }
    function viewStakeEarnings(address _token) external view returns (uint256) {
        uint256 _amount = _getCurrentEarnings(msg.sender, _token);
        return m_Earnings[msg.sender][_token] + _amount;
    }
    function viewStakingTimestamp(address _token) external view returns (uint256) {
        return m_Timestamps[msg.sender][_token];
    }
    function payoutInterval(address _token) external view returns (uint256) {
        return m_Intervals[_token];
    }
    function minimumStake(address _token) external view returns (uint256) {
        return m_Denoms[_token];
    }
    function viewPoolBalance(address _token) external view returns (uint256) {
        return m_Pools[_token];
    }
    function viewRate(address _token) external view returns (uint256, uint256) {
        uint8 _decimals = ERC20(_token).decimals();
        return (m_Rates[_token]/(10**_decimals), m_Denoms[_token]/(10**_decimals));
    }
    function intervalsElapsed(address _token) external view returns (uint256) {
        if(m_Balances[msg.sender][_token] == 0)
            return 0;
        uint256 _seconds = block.timestamp - m_Timestamps[msg.sender][_token];
        if(_seconds < m_Intervals[_token])
            return 0;
        return _seconds / m_Intervals[_token];
    }
    function setNativeFee(uint256 _value) external {
        require(msg.sender == m_Owner);
        m_NativeFee = _value;
    }
    function createTokenRequest(address _token) external payable {
        m_Requests[_token][msg.sender] += msg.value;
        require(m_Requests[_token][msg.sender] >= m_NativeFee, "Fee requirement not met"); // requirement comes second to support fee changes
        emit NewTokenRequest(_token);
    }
    function approveTokenAdminWithNative(address _token, address _admin) external {
        require(msg.sender == m_Owner);
        require(m_Requests[_token][_admin] >= m_NativeFee, "Fee requirement not met");
        uint256 _remainder = m_Requests[_token][_admin] - m_NativeFee;
        if(_remainder > 0)
            payable(_admin).transfer(_remainder);
        payable(m_Owner).transfer(m_Requests[_token][_admin]);
        m_Admins[_token] = _admin;
        m_Adjustable[_token] = true;
    }
    /*
    *!!! _fee later divides the deposit amount !!!
    *eg: 100 = 1%
    *eg: 50 = 2%
    *eg: 20 = 5%
    */
    function approveTokenAdminWithTokenFee(address _token, address _admin, uint256 _fee) external {
        require(msg.sender == m_Owner);
        m_Fees[_token] = _fee;
        m_Admins[_token] = _admin;
        m_Adjustable[_token] = true;
    }
    function setTokenAdminManual(address _token, address _admin) external {
        require(msg.sender == m_Owner);
        m_Admins[_token] = _admin;
        m_Adjustable[_token] = true;
    }
    function allowRateAdjustment(address _token) external {
        require(msg.sender == m_Owner);
        m_Adjustable[_token] = true;
    }
    /*
    *!!!Do no multiply decimals into the rate or denom!!!
    *Interval must be based in seconds
    *eg: 1 day = 86400
    *example: 0x0, 5, 100, 86400 = 5 tokens per 100 staked paid out each day
    */
    function setRate(address _token, uint256 _rate, uint256 _denom, uint256 _interval) external {
        require(msg.sender == m_Admins[_token]);
        require(m_Adjustable[_token]);
        require(_interval > 0);
        uint8 _decimals = ERC20(_token).decimals();
        _denom = _denom * (10 ** _decimals);
        _rate = _rate * (10 ** _decimals);
        m_Rates[_token] = _rate;
        m_Denoms[_token] = _denom;
        m_Intervals[_token] = _interval;
        m_Adjustable[_token] = false;
        emit UpdateRate(_token, _rate, _denom, _interval);
    }
    /*
    *!!!Ensure _amount is a product of decimals!!!
    *eg: 1,000,000 of a token with 9 decimals is 1,000,000,000,000,000
    *Tokens deposited with this function CANNOT be reclaimed
    */
    function depositTokensToPool(address _token, uint256 _amount) external {
        ERC20(_token).transferFrom(msg.sender, address(this), _amount);
        if(m_Fees[_token] > 0){
            uint256 _fee = _amount / m_Fees[_token];
            _amount -= _fee;
            ERC20(_token).transfer(m_Owner, _fee);
        }
        m_Pools[_token] += _amount;
        emit Fund(_token, _amount);
    }       
    /*
    *!!!Ensure _amount is a product of decimals!!!
    *eg: 1,000,000 of a token with 9 decimals is 1,000,000,000,000,000
    *Any time tokens are added stake is calculated, added, and timestamp reset
    *No earnings are awarded if it has been less than 24 hours since previous deposit
    */  
    function depositTokensToStake(address _token, uint256 _amount) external returns (uint256) {     
        ERC20(_token).transferFrom(msg.sender, address(this), _amount);
        m_Deposits[msg.sender][_token] += _amount;
        uint256 _previousEarnings = _claimDividends(msg.sender, _token);
        _amount += _previousEarnings;
        m_Earnings[msg.sender][_token] += _previousEarnings;
        m_Balances[msg.sender][_token] += _amount;
        if(_previousEarnings == 0)
            m_Timestamps[msg.sender][_token] = block.timestamp;
        emit Stake(msg.sender, _token, _amount);
        return _previousEarnings;
    }
    function reStake(address _token) external returns (uint256) {
        uint256 _amount = _claimDividends(msg.sender, _token);
        m_Earnings[msg.sender][_token] += _amount;
        m_Balances[msg.sender][_token] += _amount;
        emit Restake(msg.sender, _token);
        return _amount;
    }
    function withdraw(address _token) external returns (uint256) {
        require(!m_Locked, "Recursion Prevented");
        uint256 _amount = m_Balances[msg.sender][_token];
        require(_amount > 0, "No tokens to withdraw");
        uint256 _earnings = _claimDividends(msg.sender, _token);
        m_Earnings[msg.sender][_token] += _earnings;
        m_Deposits[msg.sender][_token] = 0;         
        m_Balances[msg.sender][_token] = 0;
        ERC20(_token).transfer(msg.sender, _amount+_earnings);
        emit Withdraw(msg.sender, _token, _amount+_earnings);
        return _earnings;
    }    
    // Removes all deposited tokens without adding earnings
    // Earnings since last deposit or reStake will be lost with this operation
    // Earnings are added from prior multiple deposits or restakes are left for later withdraw and will continue to accumulate if their balance is great enough
    function safetyWithdraw(address _token) external {
        uint256 _amount = m_Deposits[msg.sender][_token];  
        m_Deposits[msg.sender][_token] = 0;      
        m_Balances[msg.sender][_token] -= _amount;  
        ERC20(_token).transfer(msg.sender, _amount);
        emit Withdraw(msg.sender, _token, _amount);
    }
    function transferOwnership(address _owner) external {
        require(msg.sender == m_Owner);
        m_Owner = _owner;
    }
    // Balance held must be greater than denominator (eg: cannot earn if 800 held and payout is 1 per 1000)
    function _claimDividends(address _address, address _token) private Lock returns (uint256) {
        if(block.timestamp - m_Timestamps[_address][_token] < m_Intervals[_token])
            return 0;
        if(m_Balances[_address][_token] < m_Denoms[_token])
            return 0;
        uint256 _amount = _getCurrentEarnings(_address, _token);
        require(m_Pools[_token] >= _amount, "Inadequate backing funds available");
        m_Pools[_token] -= _amount;
        m_Timestamps[msg.sender][_token] = block.timestamp;
        return _amount;
    }
    function _getCurrentEarnings(address _address, address _token) private view returns (uint256) {
        return m_Rates[_token] * ((block.timestamp - m_Timestamps[_address][_token]) / m_Intervals[_token]) * (m_Balances[_address][_token] / m_Denoms[_token]);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"Token","type":"address"},{"indexed":false,"internalType":"uint256","name":"Amount","type":"uint256"}],"name":"Fund","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"Token","type":"address"}],"name":"NewTokenRequest","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"Stake","type":"address"},{"indexed":false,"internalType":"address","name":"Token","type":"address"}],"name":"Restake","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"Stakee","type":"address"},{"indexed":false,"internalType":"address","name":"Token","type":"address"},{"indexed":false,"internalType":"uint256","name":"Amount","type":"uint256"}],"name":"Stake","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"Token","type":"address"},{"indexed":false,"internalType":"uint256","name":"PayoutAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"MinimumStake","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"Interval","type":"uint256"}],"name":"UpdateRate","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"Stakee","type":"address"},{"indexed":false,"internalType":"address","name":"Token","type":"address"},{"indexed":false,"internalType":"uint256","name":"Amount","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"allowRateAdjustment","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_admin","type":"address"}],"name":"approveTokenAdminWithNative","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_admin","type":"address"},{"internalType":"uint256","name":"_fee","type":"uint256"}],"name":"approveTokenAdminWithTokenFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"createTokenRequest","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"depositTokensToPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"depositTokensToStake","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"intervalsElapsed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"minimumStake","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"payoutInterval","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"reStake","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"safetyWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"setNativeFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_rate","type":"uint256"},{"internalType":"uint256","name":"_denom","type":"uint256"},{"internalType":"uint256","name":"_interval","type":"uint256"}],"name":"setRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_admin","type":"address"}],"name":"setTokenAdminManual","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"viewPoolBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"viewRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"viewStakeBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"viewStakeEarnings","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"viewStakingTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"withdraw","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"}]

60806040526000600e60006101000a81548160ff02191690831515021790555034801561002b57600080fd5b5033600e60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506132bc8061007c6000396000f3fe60806040526004361061012a5760003560e01c80639764c4c3116100ab578063c4c787d41161006f578063c4c787d41461043e578063c78bbff11461047b578063db8147cd146104b8578063e070e55b146104e1578063e719c5321461050a578063f2fde38b146105335761012a565b80639764c4c3146103565780639c5cb6a31461037f5780639d869c01146103bc578063b45a1064146103f9578063b91a1e8f146104155761012a565b806351cff8d9116100f257806351cff8d91461024c578063716f4d571461028957806372a74b61146102c75780637708a99f146102f05780638755590c146103195761012a565b806303bb2d141461012f5780630539d6c91461016c57806337c9587d146101a957806341c044ad146101e657806342ec621e14610223575b600080fd5b34801561013b57600080fd5b5061015660048036038101906101519190612a08565b61055c565b6040516101639190612a4e565b60405180910390f35b34801561017857600080fd5b50610193600480360381019061018e9190612a95565b6105a5565b6040516101a09190612a4e565b60405180910390f35b3480156101b557600080fd5b506101d060048036038101906101cb9190612a08565b6108cc565b6040516101dd9190612a4e565b60405180910390f35b3480156101f257600080fd5b5061020d60048036038101906102089190612a08565b61096b565b60405161021a9190612a4e565b60405180910390f35b34801561022f57600080fd5b5061024a60048036038101906102459190612ad5565b6109f1565b005b34801561025857600080fd5b50610273600480360381019061026e9190612a08565b610b69565b6040516102809190612a4e565b60405180910390f35b34801561029557600080fd5b506102b060048036038101906102ab9190612a08565b610efe565b6040516102be929190612b28565b60405180910390f35b3480156102d357600080fd5b506102ee60048036038101906102e99190612a08565b61102c565b005b3480156102fc57600080fd5b5061031760048036038101906103129190612b51565b6110e0565b005b34801561032557600080fd5b50610340600480360381019061033b9190612a08565b611213565b60405161034d9190612a4e565b60405180910390f35b34801561036257600080fd5b5061037d60048036038101906103789190612b91565b6113d2565b005b34801561038b57600080fd5b506103a660048036038101906103a19190612a08565b6116d9565b6040516103b39190612a4e565b60405180910390f35b3480156103c857600080fd5b506103e360048036038101906103de9190612a08565b611850565b6040516103f09190612a4e565b60405180910390f35b610413600480360381019061040e9190612a08565b6118d6565b005b34801561042157600080fd5b5061043c60048036038101906104379190612bf8565b611a64565b005b34801561044a57600080fd5b5061046560048036038101906104609190612a08565b611ac8565b6040516104729190612a4e565b60405180910390f35b34801561048757600080fd5b506104a2600480360381019061049d9190612a08565b611b11565b6040516104af9190612a4e565b60405180910390f35b3480156104c457600080fd5b506104df60048036038101906104da9190612a08565b611b5a565b005b3480156104ed57600080fd5b5061050860048036038101906105039190612b51565b611dae565b005b34801561051657600080fd5b50610531600480360381019061052c9190612a95565b612167565b005b34801561053f57600080fd5b5061055a60048036038101906105559190612a08565b6123c3565b005b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60008273ffffffffffffffffffffffffffffffffffffffff166323b872dd3330856040518463ffffffff1660e01b81526004016105e493929190612c34565b6020604051808303816000875af1158015610603573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106279190612ca3565b5081600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546106b49190612cff565b9250508190555060006106c73385612461565b905080836106d59190612cff565b925080600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546107639190612cff565b9250508190555082600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546107f69190612cff565b92505081905550600081036108875742600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b7f99039fcf0a98f484616c5196ee8b2ecfa971babf0b519848289ea4db381f85f73385856040516108ba93929190612c34565b60405180910390a18091505092915050565b6000806108d933846127ae565b905080600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546109639190612cff565b915050919050565b6000600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600e60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610a4b57600080fd5b80600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060016000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550505050565b6000600e60009054906101000a900460ff1615610bbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb290612d90565b60405180910390fd5b6000600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008111610c7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7690612dfc565b60405180910390fd5b6000610c8b3385612461565b905080600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610d199190612cff565b925050819055506000600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff1663a9059cbb338385610e4d9190612cff565b6040518363ffffffff1660e01b8152600401610e6a929190612e1c565b6020604051808303816000875af1158015610e89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ead9190612ca3565b507f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb33858385610edd9190612cff565b604051610eec93929190612c34565b60405180910390a18092505050919050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f729190612e7e565b905080600a610f819190612fde565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610fcb9190613058565b81600a610fd89190612fde565b600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546110229190613058565b9250925050915091565b600e60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461108657600080fd5b60016000808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600e60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461113a57600080fd5b80600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060016000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600080600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054036112a157600090506113cd565b6000600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020544261132b9190613089565b9050600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205481101561137e5760009150506113cd565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054816113c99190613058565b9150505b919050565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461146957600080fd5b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166114be57600080fd5b600081116114cb57600080fd5b60008473ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611518573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061153c9190612e7e565b905080600a61154b9190612fde565b8361155691906130bd565b925080600a6115659190612fde565b8461157091906130bd565b935083600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555082600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060008060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f38d240d5bb45cc1d3380857bdad867ce49e64ab602fe27af6dbb73116c666e37858585856040516116ca94939291906130ff565b60405180910390a15050505050565b6000806116e63384612461565b905080600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546117749190612cff565b9250508190555080600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118079190612cff565b925050819055507f729a3c2c182b2a6c80743b2625e4e922356f1e5a5717a8bc39aed23a4295ddc0338460405161183f929190613144565b60405180910390a180915050919050565b6000600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b34600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546119629190612cff565b92505081905550600f54600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015611a2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a21906131b9565b60405180910390fd5b7f4f521c5255178b457d31a9191bd311bd9e3dd14e78291703b807a989df3ff33581604051611a5991906131d9565b60405180910390a150565b600e60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611abe57600080fd5b80600f8190555050565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611ce99190613089565b925050819055508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401611d2b929190612e1c565b6020604051808303816000875af1158015611d4a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d6e9190612ca3565b507f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb338383604051611da293929190612c34565b60405180910390a15050565b600e60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611e0857600080fd5b600f54600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015611ec9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec0906131b9565b60405180910390fd5b6000600f54600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611f559190613089565b90506000811115611fa8578173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611fa6573d6000803e3d6000fd5b505b600e60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549081150290604051600060405180830381858888f1935050505015801561208c573d6000803e3d6000fd5b5081600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060016000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550505050565b8173ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b81526004016121a493929190612c34565b6020604051808303816000875af11580156121c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121e79190612ca3565b506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115612330576000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548261227d9190613058565b9050808261228b9190613089565b91508273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600e60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b81526004016122ea929190612e1c565b6020604051808303816000875af1158015612309573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061232d9190612ca3565b50505b80600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461237f9190612cff565b925050819055507fda8220a878ff7a89474ccffdaa31ea1ed1ffbb0207d5051afccc4fbaf81f9bcd82826040516123b7929190612e1c565b60405180910390a15050565b600e60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461241d57600080fd5b80600e60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006001600e60006101000a81548160ff021916908315150217905550600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054426125469190613089565b1015612555576000905061278d565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015612621576000905061278d565b600061262d84846127ae565b905080600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410156126b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a890613266565b60405180910390fd5b80600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546127009190613089565b9250508190555042600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550809150505b6000600e60006101000a81548160ff02191690831515021790555092915050565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128779190613058565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020544261293f9190613089565b6129499190613058565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461299391906130bd565b61299d91906130bd565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006129d5826129aa565b9050919050565b6129e5816129ca565b81146129f057600080fd5b50565b600081359050612a02816129dc565b92915050565b600060208284031215612a1e57612a1d6129a5565b5b6000612a2c848285016129f3565b91505092915050565b6000819050919050565b612a4881612a35565b82525050565b6000602082019050612a636000830184612a3f565b92915050565b612a7281612a35565b8114612a7d57600080fd5b50565b600081359050612a8f81612a69565b92915050565b60008060408385031215612aac57612aab6129a5565b5b6000612aba858286016129f3565b9250506020612acb85828601612a80565b9150509250929050565b600080600060608486031215612aee57612aed6129a5565b5b6000612afc868287016129f3565b9350506020612b0d868287016129f3565b9250506040612b1e86828701612a80565b9150509250925092565b6000604082019050612b3d6000830185612a3f565b612b4a6020830184612a3f565b9392505050565b60008060408385031215612b6857612b676129a5565b5b6000612b76858286016129f3565b9250506020612b87858286016129f3565b9150509250929050565b60008060008060808587031215612bab57612baa6129a5565b5b6000612bb9878288016129f3565b9450506020612bca87828801612a80565b9350506040612bdb87828801612a80565b9250506060612bec87828801612a80565b91505092959194509250565b600060208284031215612c0e57612c0d6129a5565b5b6000612c1c84828501612a80565b91505092915050565b612c2e816129ca565b82525050565b6000606082019050612c496000830186612c25565b612c566020830185612c25565b612c636040830184612a3f565b949350505050565b60008115159050919050565b612c8081612c6b565b8114612c8b57600080fd5b50565b600081519050612c9d81612c77565b92915050565b600060208284031215612cb957612cb86129a5565b5b6000612cc784828501612c8e565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612d0a82612a35565b9150612d1583612a35565b9250828201905080821115612d2d57612d2c612cd0565b5b92915050565b600082825260208201905092915050565b7f526563757273696f6e2050726576656e74656400000000000000000000000000600082015250565b6000612d7a601383612d33565b9150612d8582612d44565b602082019050919050565b60006020820190508181036000830152612da981612d6d565b9050919050565b7f4e6f20746f6b656e7320746f2077697468647261770000000000000000000000600082015250565b6000612de6601583612d33565b9150612df182612db0565b602082019050919050565b60006020820190508181036000830152612e1581612dd9565b9050919050565b6000604082019050612e316000830185612c25565b612e3e6020830184612a3f565b9392505050565b600060ff82169050919050565b612e5b81612e45565b8114612e6657600080fd5b50565b600081519050612e7881612e52565b92915050565b600060208284031215612e9457612e936129a5565b5b6000612ea284828501612e69565b91505092915050565b60008160011c9050919050565b6000808291508390505b6001851115612f0257808604811115612ede57612edd612cd0565b5b6001851615612eed5780820291505b8081029050612efb85612eab565b9450612ec2565b94509492505050565b600082612f1b5760019050612fd7565b81612f295760009050612fd7565b8160018114612f3f5760028114612f4957612f78565b6001915050612fd7565b60ff841115612f5b57612f5a612cd0565b5b8360020a915084821115612f7257612f71612cd0565b5b50612fd7565b5060208310610133831016604e8410600b8410161715612fad5782820a905083811115612fa857612fa7612cd0565b5b612fd7565b612fba8484846001612eb8565b92509050818404811115612fd157612fd0612cd0565b5b81810290505b9392505050565b6000612fe982612a35565b9150612ff483612e45565b92506130217fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484612f0b565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061306382612a35565b915061306e83612a35565b92508261307e5761307d613029565b5b828204905092915050565b600061309482612a35565b915061309f83612a35565b92508282039050818111156130b7576130b6612cd0565b5b92915050565b60006130c882612a35565b91506130d383612a35565b92508282026130e181612a35565b915082820484148315176130f8576130f7612cd0565b5b5092915050565b60006080820190506131146000830187612c25565b6131216020830186612a3f565b61312e6040830185612a3f565b61313b6060830184612a3f565b95945050505050565b60006040820190506131596000830185612c25565b6131666020830184612c25565b9392505050565b7f46656520726571756972656d656e74206e6f74206d6574000000000000000000600082015250565b60006131a3601783612d33565b91506131ae8261316d565b602082019050919050565b600060208201905081810360008301526131d281613196565b9050919050565b60006020820190506131ee6000830184612c25565b92915050565b7f496e6164657175617465206261636b696e672066756e647320617661696c616260008201527f6c65000000000000000000000000000000000000000000000000000000000000602082015250565b6000613250602283612d33565b915061325b826131f4565b604082019050919050565b6000602082019050818103600083015261327f81613243565b905091905056fea2646970667358221220d1a465cb96314ccb091cfe3b817f43d5580b935c5b62ad576c34a288522f9f6e64736f6c63430008110033

Deployed Bytecode

0x60806040526004361061012a5760003560e01c80639764c4c3116100ab578063c4c787d41161006f578063c4c787d41461043e578063c78bbff11461047b578063db8147cd146104b8578063e070e55b146104e1578063e719c5321461050a578063f2fde38b146105335761012a565b80639764c4c3146103565780639c5cb6a31461037f5780639d869c01146103bc578063b45a1064146103f9578063b91a1e8f146104155761012a565b806351cff8d9116100f257806351cff8d91461024c578063716f4d571461028957806372a74b61146102c75780637708a99f146102f05780638755590c146103195761012a565b806303bb2d141461012f5780630539d6c91461016c57806337c9587d146101a957806341c044ad146101e657806342ec621e14610223575b600080fd5b34801561013b57600080fd5b5061015660048036038101906101519190612a08565b61055c565b6040516101639190612a4e565b60405180910390f35b34801561017857600080fd5b50610193600480360381019061018e9190612a95565b6105a5565b6040516101a09190612a4e565b60405180910390f35b3480156101b557600080fd5b506101d060048036038101906101cb9190612a08565b6108cc565b6040516101dd9190612a4e565b60405180910390f35b3480156101f257600080fd5b5061020d60048036038101906102089190612a08565b61096b565b60405161021a9190612a4e565b60405180910390f35b34801561022f57600080fd5b5061024a60048036038101906102459190612ad5565b6109f1565b005b34801561025857600080fd5b50610273600480360381019061026e9190612a08565b610b69565b6040516102809190612a4e565b60405180910390f35b34801561029557600080fd5b506102b060048036038101906102ab9190612a08565b610efe565b6040516102be929190612b28565b60405180910390f35b3480156102d357600080fd5b506102ee60048036038101906102e99190612a08565b61102c565b005b3480156102fc57600080fd5b5061031760048036038101906103129190612b51565b6110e0565b005b34801561032557600080fd5b50610340600480360381019061033b9190612a08565b611213565b60405161034d9190612a4e565b60405180910390f35b34801561036257600080fd5b5061037d60048036038101906103789190612b91565b6113d2565b005b34801561038b57600080fd5b506103a660048036038101906103a19190612a08565b6116d9565b6040516103b39190612a4e565b60405180910390f35b3480156103c857600080fd5b506103e360048036038101906103de9190612a08565b611850565b6040516103f09190612a4e565b60405180910390f35b610413600480360381019061040e9190612a08565b6118d6565b005b34801561042157600080fd5b5061043c60048036038101906104379190612bf8565b611a64565b005b34801561044a57600080fd5b5061046560048036038101906104609190612a08565b611ac8565b6040516104729190612a4e565b60405180910390f35b34801561048757600080fd5b506104a2600480360381019061049d9190612a08565b611b11565b6040516104af9190612a4e565b60405180910390f35b3480156104c457600080fd5b506104df60048036038101906104da9190612a08565b611b5a565b005b3480156104ed57600080fd5b5061050860048036038101906105039190612b51565b611dae565b005b34801561051657600080fd5b50610531600480360381019061052c9190612a95565b612167565b005b34801561053f57600080fd5b5061055a60048036038101906105559190612a08565b6123c3565b005b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60008273ffffffffffffffffffffffffffffffffffffffff166323b872dd3330856040518463ffffffff1660e01b81526004016105e493929190612c34565b6020604051808303816000875af1158015610603573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106279190612ca3565b5081600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546106b49190612cff565b9250508190555060006106c73385612461565b905080836106d59190612cff565b925080600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546107639190612cff565b9250508190555082600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546107f69190612cff565b92505081905550600081036108875742600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b7f99039fcf0a98f484616c5196ee8b2ecfa971babf0b519848289ea4db381f85f73385856040516108ba93929190612c34565b60405180910390a18091505092915050565b6000806108d933846127ae565b905080600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546109639190612cff565b915050919050565b6000600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600e60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610a4b57600080fd5b80600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060016000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550505050565b6000600e60009054906101000a900460ff1615610bbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb290612d90565b60405180910390fd5b6000600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008111610c7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7690612dfc565b60405180910390fd5b6000610c8b3385612461565b905080600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610d199190612cff565b925050819055506000600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff1663a9059cbb338385610e4d9190612cff565b6040518363ffffffff1660e01b8152600401610e6a929190612e1c565b6020604051808303816000875af1158015610e89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ead9190612ca3565b507f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb33858385610edd9190612cff565b604051610eec93929190612c34565b60405180910390a18092505050919050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f729190612e7e565b905080600a610f819190612fde565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610fcb9190613058565b81600a610fd89190612fde565b600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546110229190613058565b9250925050915091565b600e60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461108657600080fd5b60016000808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600e60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461113a57600080fd5b80600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060016000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600080600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054036112a157600090506113cd565b6000600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020544261132b9190613089565b9050600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205481101561137e5760009150506113cd565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054816113c99190613058565b9150505b919050565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461146957600080fd5b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166114be57600080fd5b600081116114cb57600080fd5b60008473ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611518573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061153c9190612e7e565b905080600a61154b9190612fde565b8361155691906130bd565b925080600a6115659190612fde565b8461157091906130bd565b935083600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555082600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060008060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f38d240d5bb45cc1d3380857bdad867ce49e64ab602fe27af6dbb73116c666e37858585856040516116ca94939291906130ff565b60405180910390a15050505050565b6000806116e63384612461565b905080600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546117749190612cff565b9250508190555080600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118079190612cff565b925050819055507f729a3c2c182b2a6c80743b2625e4e922356f1e5a5717a8bc39aed23a4295ddc0338460405161183f929190613144565b60405180910390a180915050919050565b6000600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b34600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546119629190612cff565b92505081905550600f54600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015611a2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a21906131b9565b60405180910390fd5b7f4f521c5255178b457d31a9191bd311bd9e3dd14e78291703b807a989df3ff33581604051611a5991906131d9565b60405180910390a150565b600e60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611abe57600080fd5b80600f8190555050565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611ce99190613089565b925050819055508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401611d2b929190612e1c565b6020604051808303816000875af1158015611d4a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d6e9190612ca3565b507f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb338383604051611da293929190612c34565b60405180910390a15050565b600e60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611e0857600080fd5b600f54600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015611ec9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec0906131b9565b60405180910390fd5b6000600f54600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611f559190613089565b90506000811115611fa8578173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611fa6573d6000803e3d6000fd5b505b600e60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549081150290604051600060405180830381858888f1935050505015801561208c573d6000803e3d6000fd5b5081600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060016000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550505050565b8173ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b81526004016121a493929190612c34565b6020604051808303816000875af11580156121c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121e79190612ca3565b506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115612330576000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548261227d9190613058565b9050808261228b9190613089565b91508273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600e60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b81526004016122ea929190612e1c565b6020604051808303816000875af1158015612309573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061232d9190612ca3565b50505b80600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461237f9190612cff565b925050819055507fda8220a878ff7a89474ccffdaa31ea1ed1ffbb0207d5051afccc4fbaf81f9bcd82826040516123b7929190612e1c565b60405180910390a15050565b600e60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461241d57600080fd5b80600e60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006001600e60006101000a81548160ff021916908315150217905550600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054426125469190613089565b1015612555576000905061278d565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015612621576000905061278d565b600061262d84846127ae565b905080600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410156126b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a890613266565b60405180910390fd5b80600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546127009190613089565b9250508190555042600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550809150505b6000600e60006101000a81548160ff02191690831515021790555092915050565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128779190613058565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020544261293f9190613089565b6129499190613058565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461299391906130bd565b61299d91906130bd565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006129d5826129aa565b9050919050565b6129e5816129ca565b81146129f057600080fd5b50565b600081359050612a02816129dc565b92915050565b600060208284031215612a1e57612a1d6129a5565b5b6000612a2c848285016129f3565b91505092915050565b6000819050919050565b612a4881612a35565b82525050565b6000602082019050612a636000830184612a3f565b92915050565b612a7281612a35565b8114612a7d57600080fd5b50565b600081359050612a8f81612a69565b92915050565b60008060408385031215612aac57612aab6129a5565b5b6000612aba858286016129f3565b9250506020612acb85828601612a80565b9150509250929050565b600080600060608486031215612aee57612aed6129a5565b5b6000612afc868287016129f3565b9350506020612b0d868287016129f3565b9250506040612b1e86828701612a80565b9150509250925092565b6000604082019050612b3d6000830185612a3f565b612b4a6020830184612a3f565b9392505050565b60008060408385031215612b6857612b676129a5565b5b6000612b76858286016129f3565b9250506020612b87858286016129f3565b9150509250929050565b60008060008060808587031215612bab57612baa6129a5565b5b6000612bb9878288016129f3565b9450506020612bca87828801612a80565b9350506040612bdb87828801612a80565b9250506060612bec87828801612a80565b91505092959194509250565b600060208284031215612c0e57612c0d6129a5565b5b6000612c1c84828501612a80565b91505092915050565b612c2e816129ca565b82525050565b6000606082019050612c496000830186612c25565b612c566020830185612c25565b612c636040830184612a3f565b949350505050565b60008115159050919050565b612c8081612c6b565b8114612c8b57600080fd5b50565b600081519050612c9d81612c77565b92915050565b600060208284031215612cb957612cb86129a5565b5b6000612cc784828501612c8e565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612d0a82612a35565b9150612d1583612a35565b9250828201905080821115612d2d57612d2c612cd0565b5b92915050565b600082825260208201905092915050565b7f526563757273696f6e2050726576656e74656400000000000000000000000000600082015250565b6000612d7a601383612d33565b9150612d8582612d44565b602082019050919050565b60006020820190508181036000830152612da981612d6d565b9050919050565b7f4e6f20746f6b656e7320746f2077697468647261770000000000000000000000600082015250565b6000612de6601583612d33565b9150612df182612db0565b602082019050919050565b60006020820190508181036000830152612e1581612dd9565b9050919050565b6000604082019050612e316000830185612c25565b612e3e6020830184612a3f565b9392505050565b600060ff82169050919050565b612e5b81612e45565b8114612e6657600080fd5b50565b600081519050612e7881612e52565b92915050565b600060208284031215612e9457612e936129a5565b5b6000612ea284828501612e69565b91505092915050565b60008160011c9050919050565b6000808291508390505b6001851115612f0257808604811115612ede57612edd612cd0565b5b6001851615612eed5780820291505b8081029050612efb85612eab565b9450612ec2565b94509492505050565b600082612f1b5760019050612fd7565b81612f295760009050612fd7565b8160018114612f3f5760028114612f4957612f78565b6001915050612fd7565b60ff841115612f5b57612f5a612cd0565b5b8360020a915084821115612f7257612f71612cd0565b5b50612fd7565b5060208310610133831016604e8410600b8410161715612fad5782820a905083811115612fa857612fa7612cd0565b5b612fd7565b612fba8484846001612eb8565b92509050818404811115612fd157612fd0612cd0565b5b81810290505b9392505050565b6000612fe982612a35565b9150612ff483612e45565b92506130217fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484612f0b565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061306382612a35565b915061306e83612a35565b92508261307e5761307d613029565b5b828204905092915050565b600061309482612a35565b915061309f83612a35565b92508282039050818111156130b7576130b6612cd0565b5b92915050565b60006130c882612a35565b91506130d383612a35565b92508282026130e181612a35565b915082820484148315176130f8576130f7612cd0565b5b5092915050565b60006080820190506131146000830187612c25565b6131216020830186612a3f565b61312e6040830185612a3f565b61313b6060830184612a3f565b95945050505050565b60006040820190506131596000830185612c25565b6131666020830184612c25565b9392505050565b7f46656520726571756972656d656e74206e6f74206d6574000000000000000000600082015250565b60006131a3601783612d33565b91506131ae8261316d565b602082019050919050565b600060208201905081810360008301526131d281613196565b9050919050565b60006020820190506131ee6000830184612c25565b92915050565b7f496e6164657175617465206261636b696e672066756e647320617661696c616260008201527f6c65000000000000000000000000000000000000000000000000000000000000602082015250565b6000613250602283612d33565b915061325b826131f4565b604082019050919050565b6000602082019050818103600083015261327f81613243565b905091905056fea2646970667358221220d1a465cb96314ccb091cfe3b817f43d5580b935c5b62ad576c34a288522f9f6e64736f6c63430008110033

Deployed Bytecode Sourcemap

346:9527:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2471:114;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6581:641;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1873:209;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1737:130;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4250:249;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7538:609;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2591:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;4704:141;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4505:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2818:349;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5068:577;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7228:304;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2088:136;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3306:305;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3173:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2230:117;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2353:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8459:330;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3617:504;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5853:406;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8795:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2471:114;2535:7;2562;:15;2570:6;2562:15;;;;;;;;;;;;;;;;2555:22;;2471:114;;;:::o;6581:641::-;6662:7;6693:6;6687:26;;;6714:10;6734:4;6741:7;6687:62;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;6794:7;6760:10;:22;6771:10;6760:22;;;;;;;;;;;;;;;:30;6783:6;6760:30;;;;;;;;;;;;;;;;:41;;;;;;;:::i;:::-;;;;;;;;6812:25;6840:35;6856:10;6868:6;6840:15;:35::i;:::-;6812:63;;6897:17;6886:28;;;;;:::i;:::-;;;6959:17;6925:10;:22;6936:10;6925:22;;;;;;;;;;;;;;;:30;6948:6;6925:30;;;;;;;;;;;;;;;;:51;;;;;;;:::i;:::-;;;;;;;;7021:7;6987:10;:22;6998:10;6987:22;;;;;;;;;;;;;;;:30;7010:6;6987:30;;;;;;;;;;;;;;;;:41;;;;;;;:::i;:::-;;;;;;;;7063:1;7042:17;:22;7039:90;;7114:15;7079:12;:24;7092:10;7079:24;;;;;;;;;;;;;;;:32;7104:6;7079:32;;;;;;;;;;;;;;;:50;;;;7039:90;7145:34;7151:10;7163:6;7171:7;7145:34;;;;;;;;:::i;:::-;;;;;;;;7197:17;7190:24;;;6581:641;;;;:::o;1873:209::-;1939:7;1959:15;1977:39;1997:10;2009:6;1977:19;:39::i;:::-;1959:57;;2067:7;2034:10;:22;2045:10;2034:22;;;;;;;;;;;;;;;:30;2057:6;2034:30;;;;;;;;;;;;;;;;:40;;;;:::i;:::-;2027:47;;;1873:209;;;:::o;1737:130::-;1802:7;1829:10;:22;1840:10;1829:22;;;;;;;;;;;;;;;:30;1852:6;1829:30;;;;;;;;;;;;;;;;1822:37;;1737:130;;;:::o;4250:249::-;4377:7;;;;;;;;;;;4363:21;;:10;:21;;;4355:30;;;;;;4413:4;4396:6;:14;4403:6;4396:14;;;;;;;;;;;;;;;:21;;;;4447:6;4428:8;:16;4437:6;4428:16;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;4487:4;4464:12;:20;4477:6;4464:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;4250:249;;;:::o;7538:609::-;7590:7;7619:8;;;;;;;;;;;7618:9;7610:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;7662:15;7680:10;:22;7691:10;7680:22;;;;;;;;;;;;;;;:30;7703:6;7680:30;;;;;;;;;;;;;;;;7662:48;;7739:1;7729:7;:11;7721:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;7777:17;7797:35;7813:10;7825:6;7797:15;:35::i;:::-;7777:55;;7877:9;7843:10;:22;7854:10;7843:22;;;;;;;;;;;;;;;:30;7866:6;7843:30;;;;;;;;;;;;;;;;:43;;;;;;;:::i;:::-;;;;;;;;7930:1;7897:10;:22;7908:10;7897:22;;;;;;;;;;;;;;;:30;7920:6;7897:30;;;;;;;;;;;;;;;:34;;;;7984:1;7951:10;:22;7962:10;7951:22;;;;;;;;;;;;;;;:30;7974:6;7951:30;;;;;;;;;;;;;;;:34;;;;8002:6;7996:22;;;8019:10;8039:9;8031:7;:17;;;;:::i;:::-;7996:53;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;8065:47;8074:10;8086:6;8102:9;8094:7;:17;;;;:::i;:::-;8065:47;;;;;;;;:::i;:::-;;;;;;;;8130:9;8123:16;;;;7538:609;;;:::o;2591:221::-;2648:7;2657;2677:15;2701:6;2695:22;;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2677:42;;2759:9;2755:2;:13;;;;:::i;:::-;2738:7;:15;2746:6;2738:15;;;;;;;;;;;;;;;;:31;;;;:::i;:::-;2793:9;2789:2;:13;;;;:::i;:::-;2771:8;:16;2780:6;2771:16;;;;;;;;;;;;;;;;:32;;;;:::i;:::-;2730:74;;;;;2591:221;;;:::o;4704:141::-;4791:7;;;;;;;;;;;4777:21;;:10;:21;;;4769:30;;;;;;4833:4;4810:12;:20;4823:6;4810:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;4704:141;:::o;4505:193::-;4608:7;;;;;;;;;;;4594:21;;:10;:21;;;4586:30;;;;;;4646:6;4627:8;:16;4636:6;4627:16;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;4686:4;4663:12;:20;4676:6;4663:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;4505:193;;:::o;2818:349::-;2883:7;2940:1;2906:10;:22;2917:10;2906:22;;;;;;;;;;;;;;;:30;2929:6;2906:30;;;;;;;;;;;;;;;;:35;2903:61;;2963:1;2956:8;;;;2903:61;2975:16;3012:12;:24;3025:10;3012:24;;;;;;;;;;;;;;;:32;3037:6;3012:32;;;;;;;;;;;;;;;;2994:15;:50;;;;:::i;:::-;2975:69;;3069:11;:19;3081:6;3069:19;;;;;;;;;;;;;;;;3058:8;:30;3055:56;;;3110:1;3103:8;;;;;3055:56;3140:11;:19;3152:6;3140:19;;;;;;;;;;;;;;;;3129:8;:30;;;;:::i;:::-;3122:37;;;2818:349;;;;:::o;5068:577::-;5193:8;:16;5202:6;5193:16;;;;;;;;;;;;;;;;;;;;;;;;;5179:30;;:10;:30;;;5171:39;;;;;;5229:12;:20;5242:6;5229:20;;;;;;;;;;;;;;;;;;;;;;;;;5221:29;;;;;;5281:1;5269:9;:13;5261:22;;;;;;5294:15;5318:6;5312:22;;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5294:42;;5372:9;5366:2;:15;;;;:::i;:::-;5356:6;:26;;;;:::i;:::-;5347:35;;5416:9;5410:2;:15;;;;:::i;:::-;5401:5;:25;;;;:::i;:::-;5393:33;;5455:5;5437:7;:15;5445:6;5437:15;;;;;;;;;;;;;;;:23;;;;5490:6;5471:8;:16;5480:6;5471:16;;;;;;;;;;;;;;;:25;;;;5529:9;5507:11;:19;5519:6;5507:19;;;;;;;;;;;;;;;:31;;;;5572:5;5549:12;:20;5562:6;5549:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;5593:44;5604:6;5612:5;5619:6;5627:9;5593:44;;;;;;;;;:::i;:::-;;;;;;;;5160:485;5068:577;;;;:::o;7228:304::-;7279:7;7299:15;7317:35;7333:10;7345:6;7317:15;:35::i;:::-;7299:53;;7397:7;7363:10;:22;7374:10;7363:22;;;;;;;;;;;;;;;:30;7386:6;7363:30;;;;;;;;;;;;;;;;:41;;;;;;;:::i;:::-;;;;;;;;7449:7;7415:10;:22;7426:10;7415:22;;;;;;;;;;;;;;;:30;7438:6;7415:30;;;;;;;;;;;;;;;;:41;;;;;;;:::i;:::-;;;;;;;;7472:27;7480:10;7492:6;7472:27;;;;;;;:::i;:::-;;;;;;;;7517:7;7510:14;;;7228:304;;;:::o;2088:136::-;2157:7;2184:12;:24;2197:10;2184:24;;;;;;;;;;;;;;;:32;2209:6;2184:32;;;;;;;;;;;;;;;;2177:39;;2088:136;;;:::o;3306:305::-;3412:9;3378:10;:18;3389:6;3378:18;;;;;;;;;;;;;;;:30;3397:10;3378:30;;;;;;;;;;;;;;;;:43;;;;;;;:::i;:::-;;;;;;;;3474:11;;3440:10;:18;3451:6;3440:18;;;;;;;;;;;;;;;:30;3459:10;3440:30;;;;;;;;;;;;;;;;:45;;3432:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;3580:23;3596:6;3580:23;;;;;;:::i;:::-;;;;;;;;3306:305;:::o;3173:127::-;3253:7;;;;;;;;;;;3239:21;;:10;:21;;;3231:30;;;;;;3286:6;3272:11;:20;;;;3173:127;:::o;2230:117::-;2293:7;2320:11;:19;2332:6;2320:19;;;;;;;;;;;;;;;;2313:26;;2230:117;;;:::o;2353:112::-;2414:7;2441:8;:16;2450:6;2441:16;;;;;;;;;;;;;;;;2434:23;;2353:112;;;:::o;8459:330::-;8519:15;8537:10;:22;8548:10;8537:22;;;;;;;;;;;;;;;:30;8560:6;8537:30;;;;;;;;;;;;;;;;8519:48;;8613:1;8580:10;:22;8591:10;8580:22;;;;;;;;;;;;;;;:30;8603:6;8580:30;;;;;;;;;;;;;;;:34;;;;8665:7;8631:10;:22;8642:10;8631:22;;;;;;;;;;;;;;;:30;8654:6;8631:30;;;;;;;;;;;;;;;;:41;;;;;;;:::i;:::-;;;;;;;;8691:6;8685:22;;;8708:10;8720:7;8685:43;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;8744:37;8753:10;8765:6;8773:7;8744:37;;;;;;;;:::i;:::-;;;;;;;;8508:281;8459:330;:::o;3617:504::-;3728:7;;;;;;;;;;;3714:21;;:10;:21;;;3706:30;;;;;;3785:11;;3755:10;:18;3766:6;3755:18;;;;;;;;;;;;;;;:26;3774:6;3755:26;;;;;;;;;;;;;;;;:41;;3747:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;3835:18;3885:11;;3856:10;:18;3867:6;3856:18;;;;;;;;;;;;;;;:26;3875:6;3856:26;;;;;;;;;;;;;;;;:40;;;;:::i;:::-;3835:61;;3923:1;3910:10;:14;3907:68;;;3947:6;3939:24;;:36;3964:10;3939:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3907:68;3994:7;;;;;;;;;;;3986:25;;:53;4012:10;:18;4023:6;4012:18;;;;;;;;;;;;;;;:26;4031:6;4012:26;;;;;;;;;;;;;;;;3986:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4069:6;4050:8;:16;4059:6;4050:16;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;4109:4;4086:12;:20;4099:6;4086:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;3695:426;3617:504;;:::o;5853:406::-;5941:6;5935:26;;;5962:10;5982:4;5989:7;5935:62;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;6028:1;6011:6;:14;6018:6;6011:14;;;;;;;;;;;;;;;;:18;6008:170;;;6045:12;6070:6;:14;6077:6;6070:14;;;;;;;;;;;;;;;;6060:7;:24;;;;:::i;:::-;6045:39;;6110:4;6099:15;;;;;:::i;:::-;;;6135:6;6129:22;;;6152:7;;;;;;;;;;;6161:4;6129:37;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;6030:148;6008:170;6207:7;6188;:15;6196:6;6188:15;;;;;;;;;;;;;;;;:26;;;;;;;:::i;:::-;;;;;;;;6230:21;6235:6;6243:7;6230:21;;;;;;;:::i;:::-;;;;;;;;5853:406;;:::o;8795:128::-;8880:7;;;;;;;;;;;8866:21;;:10;:21;;;8858:30;;;;;;8909:6;8899:7;;:16;;;;;;;;;;;;;;;;;;8795:128;:::o;9038:562::-;9119:7;1622:4;1611:8;;:15;;;;;;;;;;;;;;;;;;9193:11:::1;:19;9205:6;9193:19;;;;;;;;;;;;;;;;9160:12;:22;9173:8;9160:22;;;;;;;;;;;;;;;:30;9183:6;9160:30;;;;;;;;;;;;;;;;9142:15;:48;;;;:::i;:::-;:70;9139:96;;;9234:1;9227:8;;;;9139:96;9280:8;:16;9289:6;9280:16;;;;;;;;;;;;;;;;9249:10;:20;9260:8;9249:20;;;;;;;;;;;;;;;:28;9270:6;9249:28;;;;;;;;;;;;;;;;:47;9246:73;;;9318:1;9311:8;;;;9246:73;9330:15;9348:37;9368:8;9378:6;9348:19;:37::i;:::-;9330:55;;9423:7;9404;:15;9412:6;9404:15;;;;;;;;;;;;;;;;:26;;9396:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;9499:7;9480;:15;9488:6;9480:15;;;;;;;;;;;;;;;;:26;;;;;;;:::i;:::-;;;;;;;;9552:15;9517:12;:24;9530:10;9517:24;;;;;;;;;;;;;;;:32;9542:6;9517:32;;;;;;;;;;;;;;;:50;;;;9585:7;9578:14;;;1637:1;1660:5:::0;1649:8;;:16;;;;;;;;;;;;;;;;;;9038:562;;;;:::o;9606:264::-;9691:7;9845:8;:16;9854:6;9845:16;;;;;;;;;;;;;;;;9814:10;:20;9825:8;9814:20;;;;;;;;;;;;;;;:28;9835:6;9814:28;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;9790:11;:19;9802:6;9790:19;;;;;;;;;;;;;;;;9756:12;:22;9769:8;9756:22;;;;;;;;;;;;;;;:30;9779:6;9756:30;;;;;;;;;;;;;;;;9738:15;:48;;;;:::i;:::-;9737:72;;;;:::i;:::-;9718:7;:15;9726:6;9718:15;;;;;;;;;;;;;;;;:92;;;;:::i;:::-;:144;;;;:::i;:::-;9711:151;;9606:264;;;;:::o;88:117:1:-;197:1;194;187:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:329::-;900:6;949:2;937:9;928:7;924:23;920:32;917:119;;;955:79;;:::i;:::-;917:119;1075:1;1100:53;1145:7;1136:6;1125:9;1121:22;1100:53;:::i;:::-;1090:63;;1046:117;841:329;;;;:::o;1176:77::-;1213:7;1242:5;1231:16;;1176:77;;;:::o;1259:118::-;1346:24;1364:5;1346:24;:::i;:::-;1341:3;1334:37;1259:118;;:::o;1383:222::-;1476:4;1514:2;1503:9;1499:18;1491:26;;1527:71;1595:1;1584:9;1580:17;1571:6;1527:71;:::i;:::-;1383:222;;;;:::o;1611:122::-;1684:24;1702:5;1684:24;:::i;:::-;1677:5;1674:35;1664:63;;1723:1;1720;1713:12;1664:63;1611:122;:::o;1739:139::-;1785:5;1823:6;1810:20;1801:29;;1839:33;1866:5;1839:33;:::i;:::-;1739:139;;;;:::o;1884:474::-;1952:6;1960;2009:2;1997:9;1988:7;1984:23;1980:32;1977:119;;;2015:79;;:::i;:::-;1977:119;2135:1;2160:53;2205:7;2196:6;2185:9;2181:22;2160:53;:::i;:::-;2150:63;;2106:117;2262:2;2288:53;2333:7;2324:6;2313:9;2309:22;2288:53;:::i;:::-;2278:63;;2233:118;1884:474;;;;;:::o;2364:619::-;2441:6;2449;2457;2506:2;2494:9;2485:7;2481:23;2477:32;2474:119;;;2512:79;;:::i;:::-;2474:119;2632:1;2657:53;2702:7;2693:6;2682:9;2678:22;2657:53;:::i;:::-;2647:63;;2603:117;2759:2;2785:53;2830:7;2821:6;2810:9;2806:22;2785:53;:::i;:::-;2775:63;;2730:118;2887:2;2913:53;2958:7;2949:6;2938:9;2934:22;2913:53;:::i;:::-;2903:63;;2858:118;2364:619;;;;;:::o;2989:332::-;3110:4;3148:2;3137:9;3133:18;3125:26;;3161:71;3229:1;3218:9;3214:17;3205:6;3161:71;:::i;:::-;3242:72;3310:2;3299:9;3295:18;3286:6;3242:72;:::i;:::-;2989:332;;;;;:::o;3327:474::-;3395:6;3403;3452:2;3440:9;3431:7;3427:23;3423:32;3420:119;;;3458:79;;:::i;:::-;3420:119;3578:1;3603:53;3648:7;3639:6;3628:9;3624:22;3603:53;:::i;:::-;3593:63;;3549:117;3705:2;3731:53;3776:7;3767:6;3756:9;3752:22;3731:53;:::i;:::-;3721:63;;3676:118;3327:474;;;;;:::o;3807:765::-;3893:6;3901;3909;3917;3966:3;3954:9;3945:7;3941:23;3937:33;3934:120;;;3973:79;;:::i;:::-;3934:120;4093:1;4118:53;4163:7;4154:6;4143:9;4139:22;4118:53;:::i;:::-;4108:63;;4064:117;4220:2;4246:53;4291:7;4282:6;4271:9;4267:22;4246:53;:::i;:::-;4236:63;;4191:118;4348:2;4374:53;4419:7;4410:6;4399:9;4395:22;4374:53;:::i;:::-;4364:63;;4319:118;4476:2;4502:53;4547:7;4538:6;4527:9;4523:22;4502:53;:::i;:::-;4492:63;;4447:118;3807:765;;;;;;;:::o;4578:329::-;4637:6;4686:2;4674:9;4665:7;4661:23;4657:32;4654:119;;;4692:79;;:::i;:::-;4654:119;4812:1;4837:53;4882:7;4873:6;4862:9;4858:22;4837:53;:::i;:::-;4827:63;;4783:117;4578:329;;;;:::o;4913:118::-;5000:24;5018:5;5000:24;:::i;:::-;4995:3;4988:37;4913:118;;:::o;5037:442::-;5186:4;5224:2;5213:9;5209:18;5201:26;;5237:71;5305:1;5294:9;5290:17;5281:6;5237:71;:::i;:::-;5318:72;5386:2;5375:9;5371:18;5362:6;5318:72;:::i;:::-;5400;5468:2;5457:9;5453:18;5444:6;5400:72;:::i;:::-;5037:442;;;;;;:::o;5485:90::-;5519:7;5562:5;5555:13;5548:21;5537:32;;5485:90;;;:::o;5581:116::-;5651:21;5666:5;5651:21;:::i;:::-;5644:5;5641:32;5631:60;;5687:1;5684;5677:12;5631:60;5581:116;:::o;5703:137::-;5757:5;5788:6;5782:13;5773:22;;5804:30;5828:5;5804:30;:::i;:::-;5703:137;;;;:::o;5846:345::-;5913:6;5962:2;5950:9;5941:7;5937:23;5933:32;5930:119;;;5968:79;;:::i;:::-;5930:119;6088:1;6113:61;6166:7;6157:6;6146:9;6142:22;6113:61;:::i;:::-;6103:71;;6059:125;5846:345;;;;:::o;6197:180::-;6245:77;6242:1;6235:88;6342:4;6339:1;6332:15;6366:4;6363:1;6356:15;6383:191;6423:3;6442:20;6460:1;6442:20;:::i;:::-;6437:25;;6476:20;6494:1;6476:20;:::i;:::-;6471:25;;6519:1;6516;6512:9;6505:16;;6540:3;6537:1;6534:10;6531:36;;;6547:18;;:::i;:::-;6531:36;6383:191;;;;:::o;6580:169::-;6664:11;6698:6;6693:3;6686:19;6738:4;6733:3;6729:14;6714:29;;6580:169;;;;:::o;6755:::-;6895:21;6891:1;6883:6;6879:14;6872:45;6755:169;:::o;6930:366::-;7072:3;7093:67;7157:2;7152:3;7093:67;:::i;:::-;7086:74;;7169:93;7258:3;7169:93;:::i;:::-;7287:2;7282:3;7278:12;7271:19;;6930:366;;;:::o;7302:419::-;7468:4;7506:2;7495:9;7491:18;7483:26;;7555:9;7549:4;7545:20;7541:1;7530:9;7526:17;7519:47;7583:131;7709:4;7583:131;:::i;:::-;7575:139;;7302:419;;;:::o;7727:171::-;7867:23;7863:1;7855:6;7851:14;7844:47;7727:171;:::o;7904:366::-;8046:3;8067:67;8131:2;8126:3;8067:67;:::i;:::-;8060:74;;8143:93;8232:3;8143:93;:::i;:::-;8261:2;8256:3;8252:12;8245:19;;7904:366;;;:::o;8276:419::-;8442:4;8480:2;8469:9;8465:18;8457:26;;8529:9;8523:4;8519:20;8515:1;8504:9;8500:17;8493:47;8557:131;8683:4;8557:131;:::i;:::-;8549:139;;8276:419;;;:::o;8701:332::-;8822:4;8860:2;8849:9;8845:18;8837:26;;8873:71;8941:1;8930:9;8926:17;8917:6;8873:71;:::i;:::-;8954:72;9022:2;9011:9;9007:18;8998:6;8954:72;:::i;:::-;8701:332;;;;;:::o;9039:86::-;9074:7;9114:4;9107:5;9103:16;9092:27;;9039:86;;;:::o;9131:118::-;9202:22;9218:5;9202:22;:::i;:::-;9195:5;9192:33;9182:61;;9239:1;9236;9229:12;9182:61;9131:118;:::o;9255:139::-;9310:5;9341:6;9335:13;9326:22;;9357:31;9382:5;9357:31;:::i;:::-;9255:139;;;;:::o;9400:347::-;9468:6;9517:2;9505:9;9496:7;9492:23;9488:32;9485:119;;;9523:79;;:::i;:::-;9485:119;9643:1;9668:62;9722:7;9713:6;9702:9;9698:22;9668:62;:::i;:::-;9658:72;;9614:126;9400:347;;;;:::o;9753:102::-;9795:8;9842:5;9839:1;9835:13;9814:34;;9753:102;;;:::o;9861:848::-;9922:5;9929:4;9953:6;9944:15;;9977:5;9968:14;;9991:712;10012:1;10002:8;9999:15;9991:712;;;10107:4;10102:3;10098:14;10092:4;10089:24;10086:50;;;10116:18;;:::i;:::-;10086:50;10166:1;10156:8;10152:16;10149:451;;;10581:4;10574:5;10570:16;10561:25;;10149:451;10631:4;10625;10621:15;10613:23;;10661:32;10684:8;10661:32;:::i;:::-;10649:44;;9991:712;;;9861:848;;;;;;;:::o;10715:1073::-;10769:5;10960:8;10950:40;;10981:1;10972:10;;10983:5;;10950:40;11009:4;10999:36;;11026:1;11017:10;;11028:5;;10999:36;11095:4;11143:1;11138:27;;;;11179:1;11174:191;;;;11088:277;;11138:27;11156:1;11147:10;;11158:5;;;11174:191;11219:3;11209:8;11206:17;11203:43;;;11226:18;;:::i;:::-;11203:43;11275:8;11272:1;11268:16;11259:25;;11310:3;11303:5;11300:14;11297:40;;;11317:18;;:::i;:::-;11297:40;11350:5;;;11088:277;;11474:2;11464:8;11461:16;11455:3;11449:4;11446:13;11442:36;11424:2;11414:8;11411:16;11406:2;11400:4;11397:12;11393:35;11377:111;11374:246;;;11530:8;11524:4;11520:19;11511:28;;11565:3;11558:5;11555:14;11552:40;;;11572:18;;:::i;:::-;11552:40;11605:5;;11374:246;11645:42;11683:3;11673:8;11667:4;11664:1;11645:42;:::i;:::-;11630:57;;;;11719:4;11714:3;11710:14;11703:5;11700:25;11697:51;;;11728:18;;:::i;:::-;11697:51;11777:4;11770:5;11766:16;11757:25;;10715:1073;;;;;;:::o;11794:281::-;11852:5;11876:23;11894:4;11876:23;:::i;:::-;11868:31;;11920:25;11936:8;11920:25;:::i;:::-;11908:37;;11964:104;12001:66;11991:8;11985:4;11964:104;:::i;:::-;11955:113;;11794:281;;;;:::o;12081:180::-;12129:77;12126:1;12119:88;12226:4;12223:1;12216:15;12250:4;12247:1;12240:15;12267:185;12307:1;12324:20;12342:1;12324:20;:::i;:::-;12319:25;;12358:20;12376:1;12358:20;:::i;:::-;12353:25;;12397:1;12387:35;;12402:18;;:::i;:::-;12387:35;12444:1;12441;12437:9;12432:14;;12267:185;;;;:::o;12458:194::-;12498:4;12518:20;12536:1;12518:20;:::i;:::-;12513:25;;12552:20;12570:1;12552:20;:::i;:::-;12547:25;;12596:1;12593;12589:9;12581:17;;12620:1;12614:4;12611:11;12608:37;;;12625:18;;:::i;:::-;12608:37;12458:194;;;;:::o;12658:410::-;12698:7;12721:20;12739:1;12721:20;:::i;:::-;12716:25;;12755:20;12773:1;12755:20;:::i;:::-;12750:25;;12810:1;12807;12803:9;12832:30;12850:11;12832:30;:::i;:::-;12821:41;;13011:1;13002:7;12998:15;12995:1;12992:22;12972:1;12965:9;12945:83;12922:139;;13041:18;;:::i;:::-;12922:139;12706:362;12658:410;;;;:::o;13074:553::-;13251:4;13289:3;13278:9;13274:19;13266:27;;13303:71;13371:1;13360:9;13356:17;13347:6;13303:71;:::i;:::-;13384:72;13452:2;13441:9;13437:18;13428:6;13384:72;:::i;:::-;13466;13534:2;13523:9;13519:18;13510:6;13466:72;:::i;:::-;13548;13616:2;13605:9;13601:18;13592:6;13548:72;:::i;:::-;13074:553;;;;;;;:::o;13633:332::-;13754:4;13792:2;13781:9;13777:18;13769:26;;13805:71;13873:1;13862:9;13858:17;13849:6;13805:71;:::i;:::-;13886:72;13954:2;13943:9;13939:18;13930:6;13886:72;:::i;:::-;13633:332;;;;;:::o;13971:173::-;14111:25;14107:1;14099:6;14095:14;14088:49;13971:173;:::o;14150:366::-;14292:3;14313:67;14377:2;14372:3;14313:67;:::i;:::-;14306:74;;14389:93;14478:3;14389:93;:::i;:::-;14507:2;14502:3;14498:12;14491:19;;14150:366;;;:::o;14522:419::-;14688:4;14726:2;14715:9;14711:18;14703:26;;14775:9;14769:4;14765:20;14761:1;14750:9;14746:17;14739:47;14803:131;14929:4;14803:131;:::i;:::-;14795:139;;14522:419;;;:::o;14947:222::-;15040:4;15078:2;15067:9;15063:18;15055:26;;15091:71;15159:1;15148:9;15144:17;15135:6;15091:71;:::i;:::-;14947:222;;;;:::o;15175:221::-;15315:34;15311:1;15303:6;15299:14;15292:58;15384:4;15379:2;15371:6;15367:15;15360:29;15175:221;:::o;15402:366::-;15544:3;15565:67;15629:2;15624:3;15565:67;:::i;:::-;15558:74;;15641:93;15730:3;15641:93;:::i;:::-;15759:2;15754:3;15750:12;15743:19;;15402:366;;;:::o;15774:419::-;15940:4;15978:2;15967:9;15963:18;15955:26;;16027:9;16021:4;16017:20;16013:1;16002:9;15998:17;15991:47;16055:131;16181:4;16055:131;:::i;:::-;16047:139;;15774:419;;;:::o

Swarm Source

ipfs://d1a465cb96314ccb091cfe3b817f43d5580b935c5b62ad576c34a288522f9f6e

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.