ETH Price: $2,614.41 (-0.49%)

Contract

0x881Ef8C83e612F8573cfcC9C8a078d6f17a52BD8
 

Overview

ETH Balance

1.540950101899277637 ETH

Eth Value

$4,028.68 (@ $2,614.41/ETH)

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Sell All Cookies206431532024-08-30 18:21:4748 days ago1725042107IN
0x881Ef8C8...f17a52BD8
0 ETH0.000144492.01497882
Sell All Cookies176552712023-07-09 9:30:11466 days ago1688895011IN
0x881Ef8C8...f17a52BD8
0 ETH0.0010359914.44737276
Sell All Cookies160164862022-11-21 6:05:35696 days ago1669010735IN
0x881Ef8C8...f17a52BD8
0 ETH0.0007514710.03473604
Sell All Cookies159771302022-11-15 18:10:11702 days ago1668535811IN
0x881Ef8C8...f17a52BD8
0 ETH0.0018901725.24030994
Sell All Cookies159625572022-11-13 17:20:35704 days ago1668360035IN
0x881Ef8C8...f17a52BD8
0 ETH0.0015132820.20751514
Sell All Cookies159625482022-11-13 17:18:47704 days ago1668359927IN
0x881Ef8C8...f17a52BD8
0 ETH0.0017272921.10880023
Sell All Cookies75613572019-04-13 19:00:052014 days ago1555182005IN
0x881Ef8C8...f17a52BD8
0 ETH0.000074481.1
Sell All Cookies75258512019-04-08 6:23:042019 days ago1554704584IN
0x881Ef8C8...f17a52BD8
0 ETH0.000074481.1
Sell All Cookies75087802019-04-05 15:11:532022 days ago1554477113IN
0x881Ef8C8...f17a52BD8
0 ETH0.000074481.1
Sell All Cookies74936412019-04-03 6:04:392024 days ago1554271479IN
0x881Ef8C8...f17a52BD8
0 ETH0.000345355.1
Sell All Cookies74775412019-03-31 17:40:102027 days ago1554054010IN
0x881Ef8C8...f17a52BD8
0 ETH0.000163413.1
Sell All Cookies74749672019-03-31 8:04:152027 days ago1554019455IN
0x881Ef8C8...f17a52BD8
0 ETH0.000074481.1
Sell All Cookies74637972019-03-29 13:56:522029 days ago1553867812IN
0x881Ef8C8...f17a52BD8
0 ETH0.000209913.1
Sell All Cookies74211602019-03-22 22:18:352036 days ago1553293115IN
0x881Ef8C8...f17a52BD8
0 ETH0.000074481.1
Sell All Cookies74149112019-03-21 22:49:042037 days ago1553208544IN
0x881Ef8C8...f17a52BD8
0 ETH0.000057981.1
Sell All Cookies73577752019-03-13 1:27:432046 days ago1552440463IN
0x881Ef8C8...f17a52BD8
0 ETH0.00011072.1
Sell All Cookies73577102019-03-13 1:12:592046 days ago1552439579IN
0x881Ef8C8...f17a52BD8
0 ETH0.0000542
Sell All Cookies73363872019-03-09 17:39:342049 days ago1552153174IN
0x881Ef8C8...f17a52BD8
0 ETH0.0000562
Sell All Cookies72335282019-02-17 21:54:192069 days ago1550440459IN
0x881Ef8C8...f17a52BD8
0 ETH0.000074481.1
Sell All Cookies72034042019-02-10 17:24:292076 days ago1549819469IN
0x881Ef8C8...f17a52BD8
0 ETH0.000068531.3
Sell All Cookies71937222019-02-08 16:09:352078 days ago1549642175IN
0x881Ef8C8...f17a52BD8
0 ETH0.000216693.2
Sell All Cookies71806782019-02-06 0:14:572081 days ago1549412097IN
0x881Ef8C8...f17a52BD8
0 ETH0.000277634.1
Sell All Cookies71718262019-02-04 5:12:472082 days ago1549257167IN
0x881Ef8C8...f17a52BD8
0 ETH0.000074481.1
Sell All Cookies71648452019-02-02 19:04:522084 days ago1549134292IN
0x881Ef8C8...f17a52BD8
0 ETH0.00009481.4
Sell All Cookies71611812019-02-02 1:06:082085 days ago1549069568IN
0x881Ef8C8...f17a52BD8
0 ETH0.000094881.8
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
206431532024-08-30 18:21:4748 days ago1725042107
0x881Ef8C8...f17a52BD8
0.00932488 ETH
206403742024-08-30 9:03:1148 days ago1725008591
0x881Ef8C8...f17a52BD8
0.00024284 ETH
206401532024-08-30 8:18:5948 days ago1725005939
0x881Ef8C8...f17a52BD8
0.00045654 ETH
203639282024-07-22 18:42:2387 days ago1721673743
0x881Ef8C8...f17a52BD8
0.0000017 ETH
198549382024-05-12 15:49:59158 days ago1715528999
0x881Ef8C8...f17a52BD8
0.0041134 ETH
176552712023-07-09 9:30:11466 days ago1688895011
0x881Ef8C8...f17a52BD8
0.00000123 ETH
176552582023-07-09 9:27:35466 days ago1688894855
0x881Ef8C8...f17a52BD8
0.00000282 ETH
160164862022-11-21 6:05:35696 days ago1669010735
0x881Ef8C8...f17a52BD8
0.00001752 ETH
159771302022-11-15 18:10:11702 days ago1668535811
0x881Ef8C8...f17a52BD8
0.0000065 ETH
159625572022-11-13 17:20:35704 days ago1668360035
0x881Ef8C8...f17a52BD8
0.00000418 ETH
159531842022-11-12 9:58:11705 days ago1668247091
0x881Ef8C8...f17a52BD8
0.003 ETH
96229472020-03-07 7:45:341685 days ago1583567134
0x881Ef8C8...f17a52BD8
0.13973439 ETH
86165812019-09-25 6:35:301849 days ago1569393330
0x881Ef8C8...f17a52BD8
0.00000713 ETH
85486312019-09-14 15:56:211860 days ago1568476581
0x881Ef8C8...f17a52BD8
0.00000113 ETH
80700572019-07-02 4:57:311934 days ago1562043451
0x881Ef8C8...f17a52BD8
0.10140694 ETH
75613572019-04-13 19:00:052014 days ago1555182005
0x881Ef8C8...f17a52BD8
0.00700215 ETH
75539912019-04-12 15:40:412015 days ago1555083641
0x881Ef8C8...f17a52BD8
0.006 ETH
75503072019-04-12 1:49:482016 days ago1555033788
0x881Ef8C8...f17a52BD8
0.06 ETH
75502822019-04-12 1:43:372016 days ago1555033417
0x881Ef8C8...f17a52BD8
0.00789 ETH
75258512019-04-08 6:23:042019 days ago1554704584
0x881Ef8C8...f17a52BD8
0.00143523 ETH
75087802019-04-05 15:11:532022 days ago1554477113
0x881Ef8C8...f17a52BD8
0.00413451 ETH
74936412019-04-03 6:04:392024 days ago1554271479
0x881Ef8C8...f17a52BD8
0.00358653 ETH
74775412019-03-31 17:40:102027 days ago1554054010
0x881Ef8C8...f17a52BD8
0.00729023 ETH
74749672019-03-31 8:04:152027 days ago1554019455
0x881Ef8C8...f17a52BD8
0.00000171 ETH
74637972019-03-29 13:56:522029 days ago1553867812
0x881Ef8C8...f17a52BD8
0.01680492 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
MoonInc

Compiler Version
v0.4.20+commit.3155dd80

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2018-05-23
*/

pragma solidity 0.4.20;

/*
* Team AppX presents - Moon, Inc. | Competitive Ethereum Idle Pyramid
* Website: https://mooninc.io/
* Backup: https://mooninc.surge.sh/
* Discord: https://discord.gg/9Ab8Az3
* 
* There are 2 contracts:
* 1. MoonInc: handle Cookie production, cookie price calulation and cookie selling
*      - Reference: [Goo] https://etherscan.io/address/0x57b116da40f21f91aec57329ecb763d29c1b2355#code
* 2. ProductionUnitToken: handle production units tokens buy, sell, reinvest and withdraw
*      - Reference: [PoWTF] https://etherscan.io/address/0x702392282255f8c0993dbbbb148d80d2ef6795b1#code
*
* Features:
* - You can buy workers with ETH to increase your cookies production.
* - You can sell your cookies and claim a proportion of the cookie fund.
* - You cannot sell cookies within the first hour of a new production unit launch.
* - The selling price of a cookie depends on the Cookie Fund and the total cookies supply, the formula is:
*   CookiePrice = CookieFund / TotalCookieSupply * Multiplier
*   * Where Multiplier is a number from 0.5 to 1, which starts with 0.5 after a new production unit started, and reaches maximum value (1) after 5 days.
* - You can sell your workers at any time like normal tokens
*
* Developed by by AppX Matthew, ft. MrBlobby | GOO
*
*/

/**
 * @title SafeMath
 * @dev Math operations with safety checks that throw on error
 */
library SafeMath {

  /**
  * @dev Multiplies two numbers, throws on overflow.
  */
  function mul(uint256 a, uint256 b) internal pure returns (uint256) {
    if (a == 0) {
      return 0;
    }
    uint256 c = a * b;
    assert(c / a == b);
    return c;
  }

  /**
  * @dev Integer division of two numbers, truncating the quotient.
  */
  function div(uint256 a, uint256 b) internal pure returns (uint256) {
    // assert(b > 0); // Solidity automatically throws when dividing by 0
    uint256 c = a / b;
    // assert(a == b * c + a % b); // There is no case in which this doesn't hold
    return c;
  }

  /**
  * @dev Substracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend).
  */
  function sub(uint256 a, uint256 b) internal pure returns (uint256) {
    assert(b <= a);
    return a - b;
  }

  /**
  * @dev Adds two numbers, throws on overflow.
  */
  function add(uint256 a, uint256 b) internal pure returns (uint256) {
    uint256 c = a + b;
    assert(c >= a);
    return c;
  }
  
}

contract ProductionUnitToken {

    /*=================================
    =            MODIFIERS            =
    =================================*/

    /// @dev Only people with tokens
    modifier onlyBagholders {
        require(myTokens() > 0);
        _;
    }

    /// @dev Only people with profits
    modifier onlyStronghands {
        require(myDividends(true) > 0);
        _;
    }


    /*==============================
    =            EVENTS            =
    ==============================*/

    event onTokenPurchase(
        address indexed customerAddress,
        uint256 incomingEthereum,
        uint256 tokensMinted,
        address indexed referredBy,
        uint timestamp,
        uint256 price
    );

    event onTokenSell(
        address indexed customerAddress,
        uint256 tokensBurned,
        uint256 ethereumEarned,
        uint timestamp,
        uint256 price
    );

    event onReinvestment(
        address indexed customerAddress,
        uint256 ethereumReinvested,
        uint256 tokensMinted
    );

    event onWithdraw(
        address indexed customerAddress,
        uint256 ethereumWithdrawn
    );

    // ERC20
    event Transfer(
        address indexed from,
        address indexed to,
        uint256 tokens
    );


    /*=====================================
    =            DEPENDENCIES             =
    =====================================*/

    // MoonInc contract
    MoonInc public moonIncContract;


    /*=====================================
    =            CONFIGURABLES            =
    =====================================*/

    string public name = "Production Unit | Moon, Inc.";
    string public symbol = "ProductionUnit";
    uint8 constant public decimals = 18;

    /// @dev dividends for token purchase
    uint8 public entryFee_;

    /// @dev dividends for token transfer
    uint8 public transferFee_;

    /// @dev dividends for token selling
    uint8 public exitFee_;

    /// @dev 20% of entryFee_ is given to referrer
    uint8 constant internal refferalFee_ = 20;

    uint256 public tokenPriceInitial_; // original is 0.0000001 ether
    uint256 public tokenPriceIncremental_; // original is 0.00000001 ether
    uint256 constant internal magnitude = 2 ** 64;

    /// @dev proof of stake (10 tokens)
    uint256 public stakingRequirement = 10e18;

    // cookie production multiplier (how many cookies do 1 token make per second)
    uint256 public cookieProductionMultiplier;

    // auto start timer
    uint256 public startTime;

    // Maximum amount of dev one time pre-mine
    mapping(address => uint) public ambassadorsMaxPremine;
    mapping(address => bool) public ambassadorsPremined;
    mapping(address => address) public ambassadorsPrerequisite;


   /*=================================
    =            DATASETS            =
    ================================*/

    // amount of shares for each address (scaled number)
    mapping(address => uint256) internal tokenBalanceLedger_;
    mapping(address => uint256) internal referralBalance_;
    mapping(address => int256) internal payoutsTo_;
    uint256 internal tokenSupply_;


    /*=======================================
    =            PUBLIC FUNCTIONS           =
    =======================================*/

    /// @dev Set the MoonInc contract address to notify when token amount changes
    function ProductionUnitToken(
        address _moonIncContractAddress, uint8 _entryFee, uint8 _transferFee, uint8 _exitFee,
        uint _tokenPriceInitial, uint _tokenPriceIncremental, uint _cookieProductionMultiplier, uint _startTime
    ) public {
        moonIncContract = MoonInc(_moonIncContractAddress);
        entryFee_ = _entryFee;
        transferFee_ = _transferFee;
        exitFee_ = _exitFee;
        tokenPriceInitial_ = _tokenPriceInitial;
        tokenPriceIncremental_ = _tokenPriceIncremental;
        cookieProductionMultiplier = _cookieProductionMultiplier;
        startTime = _startTime;

        // Set ambassadors' maximum one time pre-mine amount (Total 1.47 ETH pre-mine including last 2 ambassadors from contest).
        // MA
        ambassadorsMaxPremine[0xFEA0904ACc8Df0F3288b6583f60B86c36Ea52AcD] = 0.28 ether;
        ambassadorsPremined[address(0)] = true; // first ambassador don't need prerequisite

        // BL
        ambassadorsMaxPremine[0xc951D3463EbBa4e9Ec8dDfe1f42bc5895C46eC8f] = 0.28 ether;
        ambassadorsPrerequisite[0xc951D3463EbBa4e9Ec8dDfe1f42bc5895C46eC8f] = 0xFEA0904ACc8Df0F3288b6583f60B86c36Ea52AcD;

        // PH
        ambassadorsMaxPremine[0x183feBd8828a9ac6c70C0e27FbF441b93004fC05] = 0.28 ether;
        ambassadorsPrerequisite[0x183feBd8828a9ac6c70C0e27FbF441b93004fC05] = 0xc951D3463EbBa4e9Ec8dDfe1f42bc5895C46eC8f;

        // RS
        ambassadorsMaxPremine[0x1fbc2Ca750E003A56d706C595b49a0A430EBA92d] = 0.09 ether;
        ambassadorsPrerequisite[0x1fbc2Ca750E003A56d706C595b49a0A430EBA92d] = 0x183feBd8828a9ac6c70C0e27FbF441b93004fC05;

        // LN
        ambassadorsMaxPremine[0x41F29054E7c0BC59a8AF10f3a6e7C0E53B334e05] = 0.09 ether;
        ambassadorsPrerequisite[0x41F29054E7c0BC59a8AF10f3a6e7C0E53B334e05] = 0x1fbc2Ca750E003A56d706C595b49a0A430EBA92d;

        // LE
        ambassadorsMaxPremine[0x15Fda64fCdbcA27a60Aa8c6ca882Aa3e1DE4Ea41] = 0.09 ether;
        ambassadorsPrerequisite[0x15Fda64fCdbcA27a60Aa8c6ca882Aa3e1DE4Ea41] = 0x41F29054E7c0BC59a8AF10f3a6e7C0E53B334e05;

        // MI
        ambassadorsMaxPremine[0x0a3239799518E7F7F339867A4739282014b97Dcf] = 0.09 ether;
        ambassadorsPrerequisite[0x0a3239799518E7F7F339867A4739282014b97Dcf] = 0x15Fda64fCdbcA27a60Aa8c6ca882Aa3e1DE4Ea41;

        // PO
        ambassadorsMaxPremine[0x31529d5Ab0D299D9b0594B7f2ef3515Be668AA87] = 0.09 ether;
        ambassadorsPrerequisite[0x31529d5Ab0D299D9b0594B7f2ef3515Be668AA87] = 0x0a3239799518E7F7F339867A4739282014b97Dcf;
    }

    bool public lastTwoAmbassadorsAdded;

    /// @dev Add the last 2 ambassadors from the invite contest because they both offline in the time the contract is deployed.
    function addLastTwoAmbassadors(address _address1, address _address2) public {
        require(msg.sender == 0xFEA0904ACc8Df0F3288b6583f60B86c36Ea52AcD && !lastTwoAmbassadorsAdded);

        lastTwoAmbassadorsAdded = true;

        // KHAN
        ambassadorsMaxPremine[_address1] = 0.09 ether;
        ambassadorsPrerequisite[_address1] = 0x31529d5Ab0D299D9b0594B7f2ef3515Be668AA87;

        // CRYPTOWHALE
        ambassadorsMaxPremine[_address2] = 0.09 ether;
        ambassadorsPrerequisite[_address2] = _address1;
    }

    /// @dev Converts all incoming ethereum to tokens for the caller, and passes down the referral addy (if any)
    function buy(address _referredBy) public payable returns (uint256) {
        purchaseTokens(msg.value, _referredBy);
    }

    /**
     * @dev Fallback function to handle ethereum that was send straight to the contract
     *  Unfortunately we cannot use a referral address this way.
     */
    function() payable public {
        purchaseTokens(msg.value, 0x0);
    }

    /// @dev Converts all of caller's dividends to tokens.
    function reinvest() onlyStronghands public {
        // fetch dividends
        uint256 _dividends = myDividends(false); // retrieve ref. bonus later in the code

        // pay out the dividends virtually
        address _customerAddress = msg.sender;
        payoutsTo_[_customerAddress] +=  (int256) (_dividends * magnitude);

        // retrieve ref. bonus
        _dividends += referralBalance_[_customerAddress];
        referralBalance_[_customerAddress] = 0;

        // dispatch a buy order with the virtualized "withdrawn dividends"
        uint256 _tokens = purchaseTokens(_dividends, 0x0);

        // fire event
        onReinvestment(_customerAddress, _dividends, _tokens);
    }

    /// @dev Alias of sell() and withdraw().
    function exit() public {
        // get token count for caller & sell them all
        address _customerAddress = msg.sender;
        uint256 _tokens = tokenBalanceLedger_[_customerAddress];
        if (_tokens > 0) sell(_tokens);

        // lambo delivery service
        withdraw();
    }

    /// @dev Withdraws all of the callers earnings.
    function withdraw() onlyStronghands public {
        // setup data
        address _customerAddress = msg.sender;
        uint256 _dividends = myDividends(false); // get ref. bonus later in the code

        // update dividend tracker
        payoutsTo_[_customerAddress] += (int256) (_dividends * magnitude);

        // add ref. bonus
        _dividends += referralBalance_[_customerAddress];
        referralBalance_[_customerAddress] = 0;

        // lambo delivery service
        _customerAddress.transfer(_dividends);

        // fire event
        onWithdraw(_customerAddress, _dividends);
    }

    /// @dev Liquifies tokens to ethereum.
    function sell(uint256 _amountOfTokens) onlyBagholders public {
        require(now >= startTime);

        // setup data
        address _customerAddress = msg.sender;
        // russian hackers BTFO
        require(_amountOfTokens <= tokenBalanceLedger_[_customerAddress]);
        uint256 _tokens = _amountOfTokens;
        uint256 _ethereum = tokensToEthereum_(_tokens);
        uint256 _dividends = SafeMath.div(SafeMath.mul(_ethereum, exitFee_), 100);
        uint256 _taxedEthereum = SafeMath.sub(_ethereum, _dividends);

        // burn the sold tokens
        tokenSupply_ = SafeMath.sub(tokenSupply_, _tokens);
        tokenBalanceLedger_[_customerAddress] = SafeMath.sub(tokenBalanceLedger_[_customerAddress], _tokens);

        // update dividends tracker
        int256 _updatedPayouts = (int256) (_taxedEthereum * magnitude);
        payoutsTo_[_customerAddress] -= _updatedPayouts;

        // Tell MoonInc contract for tokens amount change, and transfer dividends.
        moonIncContract.handleProductionDecrease.value(_dividends)(_customerAddress, _tokens * cookieProductionMultiplier);

        // fire event
        onTokenSell(_customerAddress, _tokens, _taxedEthereum, now, buyPrice());
    }

    /**
     * @dev Transfer tokens from the caller to a new holder.
     *  Remember, there's a fee here as well.
     */
    function transfer(address _toAddress, uint256 _amountOfTokens) onlyBagholders public returns (bool) {
        // setup
        address _customerAddress = msg.sender;

        // make sure we have the requested tokens
        require(_amountOfTokens <= tokenBalanceLedger_[_customerAddress]);

        // withdraw all outstanding dividends first
        if (myDividends(true) > 0) {
            withdraw();
        }

        // liquify 10% of the tokens that are transfered
        // these are dispersed to shareholders
        uint256 _tokenFee = SafeMath.div(SafeMath.mul(_amountOfTokens, transferFee_), 100);
        uint256 _taxedTokens = SafeMath.sub(_amountOfTokens, _tokenFee);
        uint256 _dividends = tokensToEthereum_(_tokenFee);

        // burn the fee tokens
        tokenSupply_ = SafeMath.sub(tokenSupply_, _tokenFee);

        // exchange tokens
        tokenBalanceLedger_[_customerAddress] = SafeMath.sub(tokenBalanceLedger_[_customerAddress], _amountOfTokens);
        tokenBalanceLedger_[_toAddress] = SafeMath.add(tokenBalanceLedger_[_toAddress], _taxedTokens);

        // Tell MoonInc contract for tokens amount change, and transfer dividends.
        moonIncContract.handleProductionDecrease.value(_dividends)(_customerAddress, _amountOfTokens * cookieProductionMultiplier);
        moonIncContract.handleProductionIncrease(_toAddress, _taxedTokens * cookieProductionMultiplier);

        // fire event
        Transfer(_customerAddress, _toAddress, _taxedTokens);

        // ERC20
        return true;
    }


    /*=====================================
    =      HELPERS AND CALCULATORS        =
    =====================================*/

    function getSettings() public view returns (uint8, uint8, uint8, uint256, uint256, uint256, uint256) {
        return (entryFee_, transferFee_, exitFee_, tokenPriceInitial_,
            tokenPriceIncremental_, cookieProductionMultiplier, startTime);
    }

    /**
     * @dev Method to view the current Ethereum stored in the contract
     *  Example: totalEthereumBalance()
     */
    function totalEthereumBalance() public view returns (uint256) {
        return this.balance;
    }

    /// @dev Retrieve the total token supply.
    function totalSupply() public view returns (uint256) {
        return tokenSupply_;
    }

    /// @dev Retrieve the tokens owned by the caller.
    function myTokens() public view returns (uint256) {
        address _customerAddress = msg.sender;
        return balanceOf(_customerAddress);
    }

    /**
     * @dev Retrieve the dividends owned by the caller.
     *  If `_includeReferralBonus` is to to 1/true, the referral bonus will be included in the calculations.
     *  The reason for this, is that in the frontend, we will want to get the total divs (global + ref)
     *  But in the internal calculations, we want them separate.
     */
    function myDividends(bool _includeReferralBonus) public view returns (uint256) {
        address _customerAddress = msg.sender;
        return _includeReferralBonus ? dividendsOf(_customerAddress) + referralBalance_[_customerAddress] : dividendsOf(_customerAddress) ;
    }

    /// @dev Retrieve the token balance of any single address.
    function balanceOf(address _customerAddress) public view returns (uint256) {
        return tokenBalanceLedger_[_customerAddress];
    }

    /// @dev Retrieve the dividend balance of any single address.
    function dividendsOf(address _customerAddress) public view returns (uint256) {
        return (uint256) ((int256) (-payoutsTo_[_customerAddress])) / magnitude;
    }

    /// @dev Return the sell price of 1 individual token.
    function sellPrice() public view returns (uint256) {
        // our calculation relies on the token supply, so we need supply. Doh.
        if (tokenSupply_ == 0) {
            return tokenPriceInitial_ - tokenPriceIncremental_;
        } else {
            uint256 _ethereum = tokensToEthereum_(1e18);
            uint256 _dividends = SafeMath.div(SafeMath.mul(_ethereum, exitFee_), 100);
            uint256 _taxedEthereum = SafeMath.sub(_ethereum, _dividends);

            return _taxedEthereum;
        }
    }

    /// @dev Return the buy price of 1 individual token.
    function buyPrice() public view returns (uint256) {
        // our calculation relies on the token supply, so we need supply. Doh.
        if (tokenSupply_ == 0) {
            return tokenPriceInitial_ + tokenPriceIncremental_;
        } else {
            uint256 _ethereum = tokensToEthereum_(1e18);
            uint256 _dividends = SafeMath.div(SafeMath.mul(_ethereum, entryFee_), 100);
            uint256 _taxedEthereum = SafeMath.add(_ethereum, _dividends);

            return _taxedEthereum;
        }
    }

    /// @dev Function for the frontend to dynamically retrieve the price scaling of buy orders.
    function calculateTokensReceived(uint256 _ethereumToSpend) public view returns (uint256) {
        uint256 _dividends = SafeMath.div(SafeMath.mul(_ethereumToSpend, entryFee_), 100);
        uint256 _taxedEthereum = SafeMath.sub(_ethereumToSpend, _dividends);
        uint256 _amountOfTokens = ethereumToTokens_(_taxedEthereum);

        return _amountOfTokens;
    }

    /// @dev Function for the frontend to dynamically retrieve the price scaling of sell orders.
    function calculateEthereumReceived(uint256 _tokensToSell) public view returns (uint256) {
        require(_tokensToSell <= tokenSupply_);
        uint256 _ethereum = tokensToEthereum_(_tokensToSell);
        uint256 _dividends = SafeMath.div(SafeMath.mul(_ethereum, exitFee_), 100);
        uint256 _taxedEthereum = SafeMath.sub(_ethereum, _dividends);
        return _taxedEthereum;
    }


    /*==========================================
    =            INTERNAL FUNCTIONS            =
    ==========================================*/

    /// @dev Internal function to actually purchase the tokens.
    function purchaseTokens(uint256 _incomingEthereum, address _referredBy) internal returns (uint256) {
        require(
            // auto start
            now >= startTime ||
            // ambassador pre-mine within 1 hour before startTime, sequences enforced
            (now >= startTime - 1 hours && !ambassadorsPremined[msg.sender] && ambassadorsPremined[ambassadorsPrerequisite[msg.sender]] && _incomingEthereum <= ambassadorsMaxPremine[msg.sender]) ||
            // ambassador pre-mine within 10 minutes before startTime, sequences not enforced
            (now >= startTime - 10 minutes && !ambassadorsPremined[msg.sender] && _incomingEthereum <= ambassadorsMaxPremine[msg.sender])
        );

        if (now < startTime) {
            ambassadorsPremined[msg.sender] = true;
        }

        // data setup
        address _customerAddress = msg.sender;
        uint256 _undividedDividends = SafeMath.div(SafeMath.mul(_incomingEthereum, entryFee_), 100);
        uint256 _referralBonus = SafeMath.div(SafeMath.mul(_undividedDividends, refferalFee_), 100);
        uint256 _dividends = SafeMath.sub(_undividedDividends, _referralBonus);
        uint256 _taxedEthereum = SafeMath.sub(_incomingEthereum, _undividedDividends);
        uint256 _amountOfTokens = ethereumToTokens_(_taxedEthereum);

        // no point in continuing execution if OP is a poorfag russian hacker
        // prevents overflow in the case that the pyramid somehow magically starts being used by everyone in the world
        // (or hackers)
        // and yes we know that the safemath function automatically rules out the "greater then" equasion.
        require(_amountOfTokens > 0 && SafeMath.add(_amountOfTokens, tokenSupply_) > tokenSupply_);

        // is the user referred by a masternode?
        if (
            // is this a referred purchase?
            _referredBy != 0x0000000000000000000000000000000000000000 &&

            // no cheating!
            _referredBy != _customerAddress &&

            // does the referrer have at least X whole tokens?
            // i.e is the referrer a godly chad masternode
            tokenBalanceLedger_[_referredBy] >= stakingRequirement
        ) {
            // wealth redistribution
            referralBalance_[_referredBy] = SafeMath.add(referralBalance_[_referredBy], _referralBonus);
        } else {
            // no ref purchase
            // add the referral bonus back to the global dividends cake
            _dividends = SafeMath.add(_dividends, _referralBonus);
        }

        // add tokens to the pool
        tokenSupply_ = SafeMath.add(tokenSupply_, _amountOfTokens);

        // update circulating supply & the ledger address for the customer
        tokenBalanceLedger_[_customerAddress] = SafeMath.add(tokenBalanceLedger_[_customerAddress], _amountOfTokens);

        // Tell MoonInc contract for tokens amount change, and transfer dividends.
        moonIncContract.handleProductionIncrease.value(_dividends)(_customerAddress, _amountOfTokens * cookieProductionMultiplier);

        // fire event
        onTokenPurchase(_customerAddress, _incomingEthereum, _amountOfTokens, _referredBy, now, buyPrice());

        return _amountOfTokens;
    }

    /**
     * @dev Calculate Token price based on an amount of incoming ethereum
     *  It's an algorithm, hopefully we gave you the whitepaper with it in scientific notation;
     *  Some conversions occurred to prevent decimal errors or underflows / overflows in solidity code.
     */
    function ethereumToTokens_(uint256 _ethereum) internal view returns (uint256) {
        uint256 _tokenPriceInitial = tokenPriceInitial_ * 1e18;
        uint256 _tokensReceived =
         (
            (
                // underflow attempts BTFO
                SafeMath.sub(
                    (sqrt
                        (
                            (_tokenPriceInitial ** 2)
                            +
                            (2 * (tokenPriceIncremental_ * 1e18) * (_ethereum * 1e18))
                            +
                            ((tokenPriceIncremental_ ** 2) * (tokenSupply_ ** 2))
                            +
                            (2 * tokenPriceIncremental_ * _tokenPriceInitial*tokenSupply_)
                        )
                    ), _tokenPriceInitial
                )
            ) / (tokenPriceIncremental_)
        ) - (tokenSupply_);

        return _tokensReceived;
    }

    /**
     * @dev Calculate token sell value.
     *  It's an algorithm, hopefully we gave you the whitepaper with it in scientific notation;
     *  Some conversions occurred to prevent decimal errors or underflows / overflows in solidity code.
     */
    function tokensToEthereum_(uint256 _tokens) internal view returns (uint256) {
        uint256 tokens_ = (_tokens + 1e18);
        uint256 _tokenSupply = (tokenSupply_ + 1e18);
        uint256 _etherReceived =
        (
            // underflow attempts BTFO
            SafeMath.sub(
                (
                    (
                        (
                            tokenPriceInitial_ + (tokenPriceIncremental_ * (_tokenSupply / 1e18))
                        ) - tokenPriceIncremental_
                    ) * (tokens_ - 1e18)
                ), (tokenPriceIncremental_ * ((tokens_ ** 2 - tokens_) / 1e18)) / 2
            )
        / 1e18);

        return _etherReceived;
    }

    /// @dev This is where all your gas goes.
    function sqrt(uint256 x) internal pure returns (uint256 y) {
        uint256 z = (x + 1) / 2;
        y = x;

        while (z < y) {
            y = z;
            z = (x / z + z) / 2;
        }
    }


}

contract MoonInc {

    string public constant name  = "Cookie | Moon, Inc.";
    string public constant symbol = "Cookie";
    uint8 public constant decimals = 18;

    // Global balances
    uint256 public totalCookieProduction;
    uint256 private roughSupply;
    uint256 private lastTotalCookieSaveTime; // Last time any player claimed their produced cookie

    // Balances for each player
    mapping(address => uint256) public cookieProduction;
    mapping(address => uint256) public cookieBalance;
    mapping(address => uint256) private lastCookieSaveTime; // Last time player claimed their produced cookie

    // Mapping of approved ERC20 transfers (by player)
    mapping(address => mapping(address => uint256)) internal allowed;

    // Production unit contracts
    ProductionUnitToken[] public productionUnitTokenContracts;
    mapping(address => bool) productionUnitTokenContractAddresses;

    // Store the production unit start time to calculate sell price.
    uint256[] public tokenContractStartTime;

    // Public launch at: Wed, 23 May 2018, 21:00 GMT
    uint256 public constant firstUnitStartTime = 1527109200;
    
    // ERC20 events
    event Transfer(address indexed from, address indexed to, uint tokens);
    event Approval(address indexed tokenOwner, address indexed spender, uint tokens);

    // Constructor
    function MoonInc() public payable {
        // Create first production unit (Space Kitty)
        createProductionUnit1();
    }

    // No fallback function to avoid accidentally sending money to this contract instead of ProductionUnitToken contract.
    // function() public payable {}

    // Public function to create the ProductionUnitToken contracts.

    function createProductionUnit1() public {
        require(productionUnitTokenContracts.length == 0);

        createProductionUnitTokenContract(10, 10, 10, 0.0000001 ether, 0.00000001 ether, 1, firstUnitStartTime);
    }

    function createProductionUnit2() public {
        require(productionUnitTokenContracts.length == 1);

        createProductionUnitTokenContract(15, 15, 15, 0.0000001 ether, 0.00000001 ether, 3, firstUnitStartTime + 2 days);
    }

    function createProductionUnit3() public {
        require(productionUnitTokenContracts.length == 2);

        createProductionUnitTokenContract(20, 20, 20, 0.0000001 ether, 0.00000001 ether, 9, firstUnitStartTime + 4 days);
    }

    function createProductionUnit4() public {
        require(productionUnitTokenContracts.length == 3);

        createProductionUnitTokenContract(25, 25, 25, 0.0000001 ether, 0.00000001 ether, 3**3, firstUnitStartTime + 7 days);
    }

    function createProductionUnit5() public {
        require(productionUnitTokenContracts.length == 4);

        createProductionUnitTokenContract(30, 30, 30, 0.0000001 ether, 0.00000001 ether, 3**4, firstUnitStartTime + 11 days);
    }

    function createProductionUnit6() public {
        require(productionUnitTokenContracts.length == 5);

        createProductionUnitTokenContract(30, 30, 30, 0.0000001 ether, 0.00000001 ether, 3**5, firstUnitStartTime + 16 days);
    }

    function createProductionUnit7() public {
        require(productionUnitTokenContracts.length == 6);

        createProductionUnitTokenContract(30, 30, 30, 0.0000001 ether, 0.00000001 ether, 3**6, firstUnitStartTime + 21 days);
    }

    function createProductionUnitTokenContract(
        uint8 _entryFee, uint8 _transferFee, uint8 _exitFee, uint256 _tokenPriceInitial, 
        uint256 _tokenPriceIncremental, uint256 _cookieProductionMultiplier, uint256 _startTime
    ) internal {
        ProductionUnitToken newContract = new ProductionUnitToken(address(this),
            _entryFee, _transferFee, _exitFee, _tokenPriceInitial, _tokenPriceIncremental, _cookieProductionMultiplier, _startTime);
        productionUnitTokenContracts.push(newContract);
        productionUnitTokenContractAddresses[address(newContract)] = true;

        tokenContractStartTime.push(_startTime);
    }

    function productionUnitTokenContractCount() public view returns (uint) {
        return productionUnitTokenContracts.length;
    }

    function handleProductionIncrease(address player, uint256 amount) public payable {
        require(productionUnitTokenContractAddresses[msg.sender]);

        updatePlayersCookie(player);

        totalCookieProduction = SafeMath.add(totalCookieProduction, amount);
        cookieProduction[player] = SafeMath.add(cookieProduction[player], amount);
    }

    function handleProductionDecrease(address player, uint256 amount) public payable {
        require(productionUnitTokenContractAddresses[msg.sender]);

        updatePlayersCookie(player);

        totalCookieProduction = SafeMath.sub(totalCookieProduction, amount);
        cookieProduction[player] = SafeMath.sub(cookieProduction[player], amount);
    }

    function getState() public view returns (uint256, uint256, uint256, uint256, uint256, uint256, uint256) {
        return (totalCookieProduction, cookieProduction[msg.sender], totalSupply(), balanceOf(msg.sender), 
            address(this).balance, lastTotalCookieSaveTime, computeSellPrice());
    }

    function totalSupply() public constant returns(uint256) {
        return roughSupply + balanceOfTotalUnclaimedCookie();
    }

    function balanceOf(address player) public constant returns(uint256) {
        return cookieBalance[player] + balanceOfUnclaimedCookie(player);
    }

    function balanceOfTotalUnclaimedCookie() public constant returns(uint256) {
        if (lastTotalCookieSaveTime > 0 && lastTotalCookieSaveTime < block.timestamp) {
            return (totalCookieProduction * (block.timestamp - lastTotalCookieSaveTime));
        }

        return 0;
    }

    function balanceOfUnclaimedCookie(address player) internal constant returns (uint256) {
        uint256 lastSave = lastCookieSaveTime[player];

        if (lastSave > 0 && lastSave < block.timestamp) {
            return (cookieProduction[player] * (block.timestamp - lastSave));
        }

        return 0;
    }

    function transfer(address recipient, uint256 amount) public returns (bool) {
        updatePlayersCookie(msg.sender);
        require(amount <= cookieBalance[msg.sender]);

        cookieBalance[msg.sender] -= amount;
        cookieBalance[recipient] += amount;

        Transfer(msg.sender, recipient, amount);

        return true;
    }

    function transferFrom(address player, address recipient, uint256 amount) public returns (bool) {
        updatePlayersCookie(player);
        require(amount <= allowed[player][msg.sender] && amount <= cookieBalance[player]);

        cookieBalance[player] -= amount;
        cookieBalance[recipient] += amount;
        allowed[player][msg.sender] -= amount;

        Transfer(player, recipient, amount);

        return true;
    }

    function approve(address approvee, uint256 amount) public returns (bool){
        allowed[msg.sender][approvee] = amount;
        Approval(msg.sender, approvee, amount);

        return true;
    }

    function allowance(address player, address approvee) public constant returns(uint256){
        return allowed[player][approvee];
    }

    function updatePlayersCookie(address player) internal {
        roughSupply += balanceOfTotalUnclaimedCookie();
        cookieBalance[player] += balanceOfUnclaimedCookie(player);
        lastTotalCookieSaveTime = block.timestamp;
        lastCookieSaveTime[player] = block.timestamp;
    }

    // Sell all cookies, the eth earned is calculated by the proportion of cookies owned.
    // Selling of cookie is forbidden within one hour of new production unit launch.
    function sellAllCookies() public {
        updatePlayersCookie(msg.sender);

        uint256 sellPrice = computeSellPrice();

        require(sellPrice > 0);

        uint256 myCookies = cookieBalance[msg.sender];
        uint256 value = myCookies * sellPrice / (1 ether);

        cookieBalance[msg.sender] = 0;

        msg.sender.transfer(value);
    }

    // Compute sell price for 1 cookie, it is 0.5 when a new token contract is deployed,
    // and then goes up until it reaches the maximum sell price after 5 days.
    function computeSellPrice() public view returns (uint) {
        uint256 supply = totalSupply();

        if (supply == 0) {
            return 0;
        }

        uint index;
        uint lastTokenContractStartTime = now;

        while (index < tokenContractStartTime.length && tokenContractStartTime[index] < now) {
            lastTokenContractStartTime = tokenContractStartTime[index];
            index++;
        }

        if (now < lastTokenContractStartTime + 1 hours) {
            return 0;
        }

        uint timeToMaxValue = 5 days;

        uint256 secondsPassed = now - lastTokenContractStartTime;
        secondsPassed = secondsPassed <= timeToMaxValue ? secondsPassed : timeToMaxValue;
        uint256 multiplier = 5000 + 5000 * secondsPassed / timeToMaxValue;

        return 1 ether * address(this).balance / supply * multiplier / 10000;
    }

}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalCookieProduction","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"approvee","type":"address"},{"name":"amount","type":"uint256"}],"name":"approve","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getState","outputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"player","type":"address"},{"name":"recipient","type":"address"},{"name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"player","type":"address"},{"name":"amount","type":"uint256"}],"name":"handleProductionIncrease","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"createProductionUnit5","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"createProductionUnit2","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"cookieProduction","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"tokenContractStartTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"productionUnitTokenContracts","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"player","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"sellAllCookies","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"firstUnitStartTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"cookieBalance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"player","type":"address"},{"name":"amount","type":"uint256"}],"name":"handleProductionDecrease","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[],"name":"createProductionUnit1","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"balanceOfTotalUnclaimedCookie","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"productionUnitTokenContractCount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"recipient","type":"address"},{"name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"createProductionUnit4","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"computeSellPrice","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"createProductionUnit3","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"player","type":"address"},{"name":"approvee","type":"address"}],"name":"allowance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"createProductionUnit7","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"createProductionUnit6","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[],"payable":true,"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"tokens","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"tokenOwner","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"tokens","type":"uint256"}],"name":"Approval","type":"event"}]

60606040526200001c64010000000062000a3d6200002282021704565b620001c0565b600754156200003057600080fd5b6200005f600a808064174876e8006402540be4006001635b05d65064010000000062000de96200006182021704565b565b60003088888888888888620000756200015f565b600160a060020a03909816885260ff9687166020890152948616604080890191909152939095166060870152608086019190915260a085015260c084019290925260e08301526101009091019051809103906000f0801515620000d757600080fd5b905060078054806001018281620000ef919062000170565b5060009182526020808320919091018054600160a060020a031916600160a060020a03851690811790915582526008905260409020805460ff19166001908117909155600980549091810162000146838262000170565b5060009182526020909120019190915550505050505050565b604051611a888062002c3d83390190565b8154818355818115116200019757600083815260209020620001979181019083016200019c565b505050565b620001bd91905b80821115620001b95760008155600101620001a3565b5090565b90565b612a6d80620001d06000396000f300606060405260043610620001925763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166306fdde03811462000197578063089b4d461462000227578063095ea7b3146200024f57806318160ddd14620002885780631865c57d146200029e57806323b872dd14620002f25780632c3ca924146200031d578063313ce5671462000338578063362ec5e214620003645780633f7b6be8146200037a578063569a1288146200039057806358c9737e14620003b25780635c77796b14620003cb57806370a08231146200040057806374c90d0d14620004225780637a8a872014620004385780637aa26fd9146200044e5780637f7de1851462000470578063836b680f14620004895780638db23385146200049f57806395d89b4114620004b55780639a6fb6df14620004cb578063a9059cbb14620004e1578063b1c62e8a1462000506578063ce90203c146200051c578063d0b02abc1462000532578063dd62ed3e1462000548578063e8c93aa91462000570578063eef5a4991462000586575b600080fd5b3415620001a357600080fd5b620001ad6200059c565b60405160208082528190810183818151815260200191508051906020019080838360005b83811015620001eb578082015183820152602001620001d1565b50505050905090810190601f168015620002195780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156200023357600080fd5b6200023d620005d3565b60405190815260200160405180910390f35b34156200025b57600080fd5b62000274600160a060020a0360043516602435620005d9565b604051901515815260200160405180910390f35b34156200029457600080fd5b6200023d62000645565b3415620002aa57600080fd5b620002b46200065b565b60405196875260208701959095526040808701949094526060860192909252608085015260a084015260c083019190915260e0909101905180910390f35b3415620002fe57600080fd5b62000274600160a060020a0360043581169060243516604435620006c4565b62000336600160a060020a0360043516602435620007ba565b005b34156200034457600080fd5b6200034e62000842565b60405160ff909116815260200160405180910390f35b34156200037057600080fd5b6200033662000847565b34156200038657600080fd5b620003366200087a565b34156200039c57600080fd5b6200023d600160a060020a0360043516620008ab565b3415620003be57600080fd5b6200023d600435620008bd565b3415620003d757600080fd5b620003e4600435620008dd565b604051600160a060020a03909116815260200160405180910390f35b34156200040c57600080fd5b6200023d600160a060020a036004351662000906565b34156200042e57600080fd5b6200033662000934565b34156200044457600080fd5b6200023d620009bb565b34156200045a57600080fd5b6200023d600160a060020a0360043516620009c3565b62000336600160a060020a0360043516602435620009d5565b34156200049557600080fd5b6200033662000a3d565b3415620004ab57600080fd5b6200023d62000a6d565b3415620004c157600080fd5b620001ad62000a9f565b3415620004d757600080fd5b6200023d62000ad6565b3415620004ed57600080fd5b62000274600160a060020a036004351660243562000adc565b34156200051257600080fd5b6200033662000b7d565b34156200052857600080fd5b6200023d62000bae565b34156200053e57600080fd5b6200033662000cc0565b34156200055457600080fd5b6200023d600160a060020a036004358116906024351662000cf1565b34156200057c57600080fd5b6200033662000d1c565b34156200059257600080fd5b6200033662000d4e565b60408051908101604052601381527f436f6f6b6965207c204d6f6f6e2c20496e632e00000000000000000000000000602082015281565b60005481565b600160a060020a03338116600081815260066020908152604080832094871680845294909152808220859055909291907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259085905190815260200160405180910390a350600192915050565b60006200065162000a6d565b6001540190505b90565b60008054600160a060020a0333168252600360205260408220548291829182918291829182916200068b62000645565b620006963362000906565b30600160a060020a031631600254620006ae62000bae565b959d949c50929a50909850965094509092509050565b6000620006d18462000d7f565b600160a060020a03808516600090815260066020908152604080832033909416835292905220548211801590620007205750600160a060020a0384166000908152600460205260409020548211155b15156200072c57600080fd5b600160a060020a03808516600081815260046020908152604080832080548890039055878516808452818420805489019055848452600683528184203390961684529490915290819020805486900390557fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9085905190815260200160405180910390a35060019392505050565b600160a060020a03331660009081526008602052604090205460ff161515620007e257600080fd5b620007ed8262000d7f565b620007fb6000548262000dd2565b6000908155600160a060020a03831681526003602052604090205462000822908262000dd2565b600160a060020a0390921660009081526003602052604090209190915550565b601281565b6007546004146200085757600080fd5b62000878601e808064174876e8006402540be4006051635b1456d062000de9565b565b6007546001146200088a57600080fd5b62000878600f808064174876e8006402540be4006003635b08795062000de9565b60036020526000908152604090205481565b6009805482908110620008cc57fe5b600091825260209091200154905081565b6007805482908110620008ec57fe5b600091825260209091200154600160a060020a0316905081565b6000620009138262000ef4565b600160a060020a038316600090815260046020526040902054019050919050565b6000806000620009443362000d7f565b6200094e62000bae565b9250600083116200095e57600080fd5b505033600160a060020a031660008181526004602052604080822080549290559091670de0b6b3a764000084840204916108fc83150290839051600060405180830381858888f193505050501515620009b657600080fd5b505050565b635b05d65081565b60046020526000908152604090205481565b600160a060020a03331660009081526008602052604090205460ff161515620009fd57600080fd5b62000a088262000d7f565b62000a166000548262000f53565b6000908155600160a060020a03831681526003602052604090205462000822908262000f53565b6007541562000a4b57600080fd5b62000878600a80600a64174876e8006402540be4006001635b05d65062000de9565b60008060025411801562000a82575042600254105b1562000a9957600254420360005402905062000658565b50600090565b60408051908101604052600681527f436f6f6b69650000000000000000000000000000000000000000000000000000602082015281565b60075490565b600062000ae93362000d7f565b600160a060020a03331660009081526004602052604090205482111562000b0f57600080fd5b600160a060020a033381166000818152600460205260408082208054879003905592861680825290839020805486019055917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9085905190815260200160405180910390a350600192915050565b60075460031462000b8d57600080fd5b620008786019808064174876e8006402540be400601b635b0f10d062000de9565b600080600080600080600062000bc362000645565b955085151562000bd7576000965062000cb7565b4293505b6009548510801562000c0757504260098681548110151562000bf957fe5b906000526020600020900154105b1562000c3657600980548690811062000c1c57fe5b600091825260209091200154600190950194935062000bdb565b83610e100142101562000c4d576000965062000cb7565b62069780925083420391508282111562000c68578262000c6a565b815b915082826113880281151562000c7c57fe5b04611388019050612710818730600160a060020a031631670de0b6b3a76400000281151562000ca757fe5b040281151562000cb357fe5b0496505b50505050505090565b60075460021462000cd057600080fd5b620008786014808064174876e8006402540be4006009635b0b1c5062000de9565b600160a060020a03918216600090815260066020908152604080832093909416825291909152205490565b60075460061462000d2c57600080fd5b62000878601e808064174876e8006402540be4006102d9635b2185d062000de9565b60075460051462000d5e57600080fd5b62000878601e808064174876e8006402540be40060f3635b1aee5062000de9565b62000d8962000a6d565b60018054909101905562000d9d8162000ef4565b600160a060020a0390911660009081526004602090815260408083208054909401909355426002819055600590915291902055565b60008282018381101562000de257fe5b9392505050565b6000308888888888888862000dfd62000f66565b600160a060020a03909816885260ff9687166020890152948616604080890191909152939095166060870152608086019190915260a085015260c084019290925260e08301526101009091019051809103906000f080151562000e5f57600080fd5b90506007805480600101828162000e77919062000f77565b506000918252602080832091909101805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03851690811790915582526008905260409020805460ff19166001908117909155600980549091810162000edb838262000f77565b5060009182526020909120019190915550505050505050565b600160a060020a038116600090815260056020526040812054818111801562000f1c57504281105b1562000f4857600160a060020a0383166000908152600360205260409020544282900302915062000f4d565b600091505b50919050565b60008282111562000f6057fe5b50900390565b604051611a888062000fba83390190565b815481835581811511620009b657600083815260209020620009b69181019083016200065891905b8082111562000fb5576000815560010162000f9f565b50905600606060405260408051908101604052601c81527f50726f64756374696f6e20556e6974207c204d6f6f6e2c20496e632e00000000602082015260019080516200004d92916020019062000490565b5060408051908101604052600e81527f50726f64756374696f6e556e6974000000000000000000000000000000000000602082015260029080516200009792916020019062000490565b50678ac7230489e800006006553415620000b057600080fd5b6040516101008062001a88833981016040528080519190602001805191906020018051919060200180519190602001805191906020018051919060200180519190602001805160008054600160a060020a03909b16600160a060020a03199b8c161781556003805460ff998a16620100000262ff0000199b8b166101000261ff00199b909d1660ff19928316179a909a169b909b17999099169790971790975550506004929092556005556007556008919091556703e2c284391c00007fdc959cfe2b175ed260f0d29d50a22c723de07c076741b0738b156a69a84636998190557f13da86008ba1c6922daee3e07db95305ef49ebced9f5467a0b8613fcc6b343e380549093166001179092557fb695afe0815f1a0fca34d55e5d648a369b4989966d7594ae6f113a618370409b8290557f730ff749317258461f89653602b716cd5c77b4430f734b68615d399e235daab48054841673fea0904acc8df0f3288b6583f60b86c36ea52acd1790557fc68aad4c1efaa842aea3a9d2ef6d3c57921a98bd08630ba918f144f511e9aa09919091557f632d53bb0a06b84f57f84351b146332d537795c36068497ae9ec22629c7cdc3c8054831673c951d3463ebba4e9ec8ddfe1f42bc5895c46ec8f17905567013fbe85edc900007fef927b934bc32d82ae7d641a23d3f563a41aa8e146f895d08c46497d785bdc008190557f5822f778597e038424f954d4d0a4ec35b70e4c7dc48356651af02ae4ce3acf4a8054841673183febd8828a9ac6c70c0e27fbf441b93004fc051790557f7f06417dd09751df064645fc55f4e3ad35f1aa4997f158e6625cc6c9ffe22bab8190557fa9e140e18b8636e4180c954d35a67013fae2eac65cafdc8af79fff5936148ce480548416731fbc2ca750e003a56d706c595b49a0a430eba92d1790557f29a99edf4941a3eac30edf3a60256cf4422b9bb9fb28a920b99c1f4dd243783d8190557f56121a7225f2a97c74a8b467e786fb63acc82e3c5d55a7c61bfec773825930cc805484167341f29054e7c0bc59a8af10f3a6e7c0e53b334e051790557fedf7f37d95c8653e131d57ed11c4929c66f3d8a74fde852c94dc8c9af46ca8a48190557fd433f2f4e53512cb54961dced8a1916be6e9fd9110abd57b77b2e5c3beb9b0fb805484167315fda64fcdbca27a60aa8c6ca882aa3e1de4ea411790557331529d5ab0d299d9b0594b7f2ef3515be668aa879091527fecaa8676ca64deffc478fdaf3eb925484756642be5d1b665f32b3a356ab3ec1155600b6020527f6f28103fc34e8f0762bbb16833a0dc581d4a584d896cd233edbb7c8d133e6df88054909116730a3239799518e7f7f339867a4739282014b97dcf17905562000535565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620004d357805160ff191683800117855562000503565b8280016001018555821562000503579182015b8281111562000503578251825591602001919060010190620004e6565b506200051192915062000515565b5090565b6200053291905b808211156200051157600081556001016200051c565b90565b61154380620005456000396000f3006060604052600436106101915763ffffffff60e060020a60003504166265318b811461019f57806306fdde03146101d05780630ea8e5ac1461025a57806310d0ffdd1461026d5780631162247e1461028357806318160ddd146102aa57806322609373146102bd5780632290d6e2146102d35780632b38ee56146102fc578063313ce5671461030f5780633ccfd60b146103225780634abb525a146103375780634b7503341461036657806356d399e814610379578063577ec5ae1461038c578063688abbf71461039f5780636b2f4632146103b757806370a08231146103ca57806375fb4540146103e957806378e979251461040857806385b4bb531461041b5780638620410b146104725780638ce2e0ea14610485578063949e8acd146104aa57806395d89b41146104bd578063a14b972b146104d0578063a9059cbb146104ef578063c4c1b39a14610511578063cb8cd7cb14610524578063d292d5d714610537578063e4849b3214610556578063e9fad8ee1461056c578063f088d5471461057f578063fdb5a03e14610593575b61019c3460006105a6565b50005b34156101aa57600080fd5b6101be600160a060020a0360043516610920565b60405190815260200160405180910390f35b34156101db57600080fd5b6101e3610948565b60405160208082528190810183818151815260200191508051906020019080838360005b8381101561021f578082015183820152602001610207565b50505050905090810190601f16801561024c5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561026557600080fd5b6101be6109e6565b341561027857600080fd5b6101be6004356109ec565b341561028e57600080fd5b610296610a2a565b604051901515815260200160405180910390f35b34156102b557600080fd5b6101be610a33565b34156102c857600080fd5b6101be600435610a39565b34156102de57600080fd5b6102e6610a83565b60405160ff909116815260200160405180910390f35b341561030757600080fd5b6102e6610a8c565b341561031a57600080fd5b6102e6610a9b565b341561032d57600080fd5b610335610aa0565b005b341561034257600080fd5b61034a610b6c565b604051600160a060020a03909116815260200160405180910390f35b341561037157600080fd5b6101be610b7b565b341561038457600080fd5b6101be610be1565b341561039757600080fd5b6101be610be7565b34156103aa57600080fd5b6101be6004351515610bed565b34156103c257600080fd5b6101be610c30565b34156103d557600080fd5b6101be600160a060020a0360043516610c3e565b34156103f457600080fd5b61034a600160a060020a0360043516610c59565b341561041357600080fd5b6101be610c74565b341561042657600080fd5b61042e610c7a565b60405160ff97881681529587166020870152939095166040808601919091526060850192909252608084015260a083019390935260c082015260e001905180910390f35b341561047d57600080fd5b6101be610ca7565b341561049057600080fd5b610335600160a060020a0360043581169060243516610cfb565b34156104b557600080fd5b6101be610dcb565b34156104c857600080fd5b6101e3610ddd565b34156104db57600080fd5b6101be600160a060020a0360043516610e48565b34156104fa57600080fd5b610296600160a060020a0360043516602435610e5a565b341561051c57600080fd5b6101be61109a565b341561052f57600080fd5b6102e66110a0565b341561054257600080fd5b610296600160a060020a03600435166110ae565b341561056157600080fd5b6103356004356110c3565b341561057757600080fd5b610335611295565b6101be600160a060020a03600435166112cc565b341561059e57600080fd5b6103356112d8565b6000806000806000806000600854421015806106435750610e106008540342101580156105ec5750600160a060020a0333166000908152600a602052604090205460ff16155b801561061f5750600160a060020a033381166000908152600b60209081526040808320549093168252600a9052205460ff165b80156106435750600160a060020a0333166000908152600960205260409020548911155b8061069c57506102586008540342101580156106785750600160a060020a0333166000908152600a602052604090205460ff16155b801561069c5750600160a060020a0333166000908152600960205260409020548911155b15156106a757600080fd5b6008544210156106d557600160a060020a0333166000908152600a60205260409020805460ff191660011790555b6003543396506106f4906106ed908b9060ff16611393565b60646113c9565b94506107046106ed866014611393565b935061071085856113e0565b925061071c89866113e0565b9150610727826113f2565b90506000811180156107435750600f54610741828261146c565b115b151561074e57600080fd5b600160a060020a03881615801590610778575085600160a060020a031688600160a060020a031614155b801561079e5750600654600160a060020a0389166000908152600c602052604090205410155b156107e457600160a060020a0388166000908152600d60205260409020546107c6908561146c565b600160a060020a0389166000908152600d60205260409020556107f1565b6107ee838561146c565b92505b6107fd600f548261146c565b600f55600160a060020a0386166000908152600c6020526040902054610823908261146c565b600160a060020a038088166000908152600c60205260408082209390935554600754911691632c3ca9249186918a918602905160e060020a63ffffffff8616028152600160a060020a03909216600483015260248201526044016000604051808303818588803b151561089557600080fd5b6125ee5a03f115156108a657600080fd5b5050505087600160a060020a031686600160a060020a03167f8032875b28d82ddbd303a9e4e5529d047a14ecb6290f80012a81b7e6227ff1ab8b84426108ea610ca7565b6040518085815260200184815260200183815260200182815260200194505050505060405180910390a398975050505050505050565b600160a060020a03166000908152600e60205260408120546801000000000000000091030490565b60018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156109de5780601f106109b3576101008083540402835291602001916109de565b820191906000526020600020905b8154815290600101906020018083116109c157829003601f168201915b505050505081565b60055481565b600354600090819081908190610a0a906106ed90879060ff16611393565b9250610a1685846113e0565b9150610a21826113f2565b95945050505050565b60105460ff1681565b600f5490565b600080600080600f548511151515610a5057600080fd5b610a598561147b565b600354909350610a77906106ed90859062010000900460ff16611393565b9150610a2183836113e0565b60035460ff1681565b60035462010000900460ff1681565b601281565b6000806000610aaf6001610bed565b11610ab957600080fd5b339150610ac66000610bed565b600160a060020a0383166000818152600e602090815260408083208054680100000000000000008702019055600d9091528082208054929055920192509082156108fc0290839051600060405180830381858888f193505050501515610b2b57600080fd5b81600160a060020a03167fccad973dcd043c7d680389db4378bd6b9775db7124092e9e0422c9e46d7985dc8260405190815260200160405180910390a25050565b600054600160a060020a031681565b600080600080600f5460001415610b9a57600554600454039350610bdb565b610bab670de0b6b3a764000061147b565b600354909350610bc9906106ed90859062010000900460ff16611393565b9150610bd583836113e0565b90508093505b50505090565b60065481565b60075481565b60003382610c0357610bfe81610920565b610c27565b600160a060020a0381166000908152600d6020526040902054610c2582610920565b015b91505b50919050565b600160a060020a0330163190565b600160a060020a03166000908152600c602052604090205490565b600b60205260009081526040902054600160a060020a031681565b60085481565b60035460045460055460075460085460ff8086169661010087048216966201000090049091169493929190565b600080600080600f5460001415610cc657600554600454019350610bdb565b610cd7670de0b6b3a764000061147b565b600354909350610cef906106ed90859060ff16611393565b9150610bd5838361146c565b73fea0904acc8df0f3288b6583f60b86c36ea52acd600160a060020a033316148015610d2a575060105460ff16155b1515610d3557600080fd5b6010805460ff19166001179055600160a060020a03918216600081815260096020818152604080842067013fbe85edc9000090819055600b808452828620805473ffffffffffffffffffffffffffffffffffffffff199081167331529d5ab0d299d9b0594b7f2ef3515be668aa871790915597909816855292825280842092909255949094529290922080549091169091179055565b600033610dd781610c3e565b91505090565b60028054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156109de5780601f106109b3576101008083540402835291602001916109de565b60096020526000908152604090205481565b600080600080600080610e6b610dcb565b11610e7557600080fd5b33600160a060020a0381166000908152600c6020526040902054909450861115610e9e57600080fd5b6000610eaa6001610bed565b1115610eb857610eb8610aa0565b600354610ed2906106ed908890610100900460ff16611393565b9250610ede86846113e0565b9150610ee98361147b565b9050610ef7600f54846113e0565b600f55600160a060020a0384166000908152600c6020526040902054610f1d90876113e0565b600160a060020a038086166000908152600c60205260408082209390935590891681522054610f4c908361146c565b600160a060020a038089166000908152600c60205260408082209390935554600754911691637f7de18591849188918b02905160e060020a63ffffffff8616028152600160a060020a03909216600483015260248201526044016000604051808303818588803b1515610fbe57600080fd5b6125ee5a03f11515610fcf57600080fd5b5050600054600754600160a060020a039091169250632c3ca92491508990850260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b151561103257600080fd5b6102c65a03f1151561104357600080fd5b50505086600160a060020a031684600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405190815260200160405180910390a35060019695505050505050565b60045481565b600354610100900460ff1681565b600a6020526000908152604090205460ff1681565b60008060008060008060006110d6610dcb565b116110e057600080fd5b6008544210156110ef57600080fd5b33600160a060020a0381166000908152600c602052604090205490965087111561111857600080fd5b8694506111248561147b565b600354909450611142906106ed90869062010000900460ff16611393565b925061114e84846113e0565b915061115c600f54866113e0565b600f55600160a060020a0386166000908152600c602052604090205461118290866113e0565b600160a060020a038088166000908152600c6020908152604080832094909455600e9052828120805468010000000000000000870290819003909155905460075491945090911691637f7de1859186918a918a02905160e060020a63ffffffff8616028152600160a060020a03909216600483015260248201526044016000604051808303818588803b151561121757600080fd5b6125ee5a03f1151561122857600080fd5b5050505085600160a060020a03167f8d3a0130073dbd54ab6ac632c05946df540553d3b514c9f8165b4ab7f2b1805e868442611262610ca7565b6040518085815260200184815260200183815260200182815260200194505050505060405180910390a250505050505050565b33600160a060020a0381166000908152600c6020526040812054908111156112c0576112c0816110c3565b6112c8610aa0565b5050565b6000610c2a34836105a6565b6000806000806112e86001610bed565b116112f257600080fd5b6112fc6000610bed565b33600160a060020a0381166000908152600e602090815260408083208054680100000000000000008702019055600d9091528120805490829055909201945092506113489084906105a6565b905081600160a060020a03167fbe339fc14b041c2b0e0f3dd2cd325d0c3668b78378001e53160eab3615326458848360405191825260208201526040908101905180910390a2505050565b6000808315156113a657600091506113c2565b508282028284828115156113b657fe5b04146113be57fe5b8091505b5092915050565b60008082848115156113d757fe5b04949350505050565b6000828211156113ec57fe5b50900390565b6000806000600454670de0b6b3a7640000029150600f54600554611459611453600f548660055460020202026002600f540a60026005540a0289670de0b6b3a764000002600554670de0b6b3a764000002600202026002890a0101016114e2565b856113e0565b81151561146257fe5b0403949350505050565b6000828201838110156113be57fe5b600f54600554600454600092670de0b6b3a7640000858101939181019285926114cf91838604820201038702600283670de0b6b3a763ffff1982890a8b90030104600554028115156114c957fe5b046113e0565b8115156114d857fe5b0495945050505050565b80600260018201045b81811015610c2a57809150600281828581151561150457fe5b040181151561150f57fe5b0490506114eb5600a165627a7a72305820e6acb19058a6fbafd5e5b80ae474f4fe25e8f09876fe5a085a86acd0bec86b7d0029a165627a7a72305820cb365ad7b447bfbd50f712a8821edb307381fab19eb93715876e4b98ead6ba840029606060405260408051908101604052601c81527f50726f64756374696f6e20556e6974207c204d6f6f6e2c20496e632e00000000602082015260019080516200004d92916020019062000490565b5060408051908101604052600e81527f50726f64756374696f6e556e6974000000000000000000000000000000000000602082015260029080516200009792916020019062000490565b50678ac7230489e800006006553415620000b057600080fd5b6040516101008062001a88833981016040528080519190602001805191906020018051919060200180519190602001805191906020018051919060200180519190602001805160008054600160a060020a03909b16600160a060020a03199b8c161781556003805460ff998a16620100000262ff0000199b8b166101000261ff00199b909d1660ff19928316179a909a169b909b17999099169790971790975550506004929092556005556007556008919091556703e2c284391c00007fdc959cfe2b175ed260f0d29d50a22c723de07c076741b0738b156a69a84636998190557f13da86008ba1c6922daee3e07db95305ef49ebced9f5467a0b8613fcc6b343e380549093166001179092557fb695afe0815f1a0fca34d55e5d648a369b4989966d7594ae6f113a618370409b8290557f730ff749317258461f89653602b716cd5c77b4430f734b68615d399e235daab48054841673fea0904acc8df0f3288b6583f60b86c36ea52acd1790557fc68aad4c1efaa842aea3a9d2ef6d3c57921a98bd08630ba918f144f511e9aa09919091557f632d53bb0a06b84f57f84351b146332d537795c36068497ae9ec22629c7cdc3c8054831673c951d3463ebba4e9ec8ddfe1f42bc5895c46ec8f17905567013fbe85edc900007fef927b934bc32d82ae7d641a23d3f563a41aa8e146f895d08c46497d785bdc008190557f5822f778597e038424f954d4d0a4ec35b70e4c7dc48356651af02ae4ce3acf4a8054841673183febd8828a9ac6c70c0e27fbf441b93004fc051790557f7f06417dd09751df064645fc55f4e3ad35f1aa4997f158e6625cc6c9ffe22bab8190557fa9e140e18b8636e4180c954d35a67013fae2eac65cafdc8af79fff5936148ce480548416731fbc2ca750e003a56d706c595b49a0a430eba92d1790557f29a99edf4941a3eac30edf3a60256cf4422b9bb9fb28a920b99c1f4dd243783d8190557f56121a7225f2a97c74a8b467e786fb63acc82e3c5d55a7c61bfec773825930cc805484167341f29054e7c0bc59a8af10f3a6e7c0e53b334e051790557fedf7f37d95c8653e131d57ed11c4929c66f3d8a74fde852c94dc8c9af46ca8a48190557fd433f2f4e53512cb54961dced8a1916be6e9fd9110abd57b77b2e5c3beb9b0fb805484167315fda64fcdbca27a60aa8c6ca882aa3e1de4ea411790557331529d5ab0d299d9b0594b7f2ef3515be668aa879091527fecaa8676ca64deffc478fdaf3eb925484756642be5d1b665f32b3a356ab3ec1155600b6020527f6f28103fc34e8f0762bbb16833a0dc581d4a584d896cd233edbb7c8d133e6df88054909116730a3239799518e7f7f339867a4739282014b97dcf17905562000535565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620004d357805160ff191683800117855562000503565b8280016001018555821562000503579182015b8281111562000503578251825591602001919060010190620004e6565b506200051192915062000515565b5090565b6200053291905b808211156200051157600081556001016200051c565b90565b61154380620005456000396000f3006060604052600436106101915763ffffffff60e060020a60003504166265318b811461019f57806306fdde03146101d05780630ea8e5ac1461025a57806310d0ffdd1461026d5780631162247e1461028357806318160ddd146102aa57806322609373146102bd5780632290d6e2146102d35780632b38ee56146102fc578063313ce5671461030f5780633ccfd60b146103225780634abb525a146103375780634b7503341461036657806356d399e814610379578063577ec5ae1461038c578063688abbf71461039f5780636b2f4632146103b757806370a08231146103ca57806375fb4540146103e957806378e979251461040857806385b4bb531461041b5780638620410b146104725780638ce2e0ea14610485578063949e8acd146104aa57806395d89b41146104bd578063a14b972b146104d0578063a9059cbb146104ef578063c4c1b39a14610511578063cb8cd7cb14610524578063d292d5d714610537578063e4849b3214610556578063e9fad8ee1461056c578063f088d5471461057f578063fdb5a03e14610593575b61019c3460006105a6565b50005b34156101aa57600080fd5b6101be600160a060020a0360043516610920565b60405190815260200160405180910390f35b34156101db57600080fd5b6101e3610948565b60405160208082528190810183818151815260200191508051906020019080838360005b8381101561021f578082015183820152602001610207565b50505050905090810190601f16801561024c5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561026557600080fd5b6101be6109e6565b341561027857600080fd5b6101be6004356109ec565b341561028e57600080fd5b610296610a2a565b604051901515815260200160405180910390f35b34156102b557600080fd5b6101be610a33565b34156102c857600080fd5b6101be600435610a39565b34156102de57600080fd5b6102e6610a83565b60405160ff909116815260200160405180910390f35b341561030757600080fd5b6102e6610a8c565b341561031a57600080fd5b6102e6610a9b565b341561032d57600080fd5b610335610aa0565b005b341561034257600080fd5b61034a610b6c565b604051600160a060020a03909116815260200160405180910390f35b341561037157600080fd5b6101be610b7b565b341561038457600080fd5b6101be610be1565b341561039757600080fd5b6101be610be7565b34156103aa57600080fd5b6101be6004351515610bed565b34156103c257600080fd5b6101be610c30565b34156103d557600080fd5b6101be600160a060020a0360043516610c3e565b34156103f457600080fd5b61034a600160a060020a0360043516610c59565b341561041357600080fd5b6101be610c74565b341561042657600080fd5b61042e610c7a565b60405160ff97881681529587166020870152939095166040808601919091526060850192909252608084015260a083019390935260c082015260e001905180910390f35b341561047d57600080fd5b6101be610ca7565b341561049057600080fd5b610335600160a060020a0360043581169060243516610cfb565b34156104b557600080fd5b6101be610dcb565b34156104c857600080fd5b6101e3610ddd565b34156104db57600080fd5b6101be600160a060020a0360043516610e48565b34156104fa57600080fd5b610296600160a060020a0360043516602435610e5a565b341561051c57600080fd5b6101be61109a565b341561052f57600080fd5b6102e66110a0565b341561054257600080fd5b610296600160a060020a03600435166110ae565b341561056157600080fd5b6103356004356110c3565b341561057757600080fd5b610335611295565b6101be600160a060020a03600435166112cc565b341561059e57600080fd5b6103356112d8565b6000806000806000806000600854421015806106435750610e106008540342101580156105ec5750600160a060020a0333166000908152600a602052604090205460ff16155b801561061f5750600160a060020a033381166000908152600b60209081526040808320549093168252600a9052205460ff165b80156106435750600160a060020a0333166000908152600960205260409020548911155b8061069c57506102586008540342101580156106785750600160a060020a0333166000908152600a602052604090205460ff16155b801561069c5750600160a060020a0333166000908152600960205260409020548911155b15156106a757600080fd5b6008544210156106d557600160a060020a0333166000908152600a60205260409020805460ff191660011790555b6003543396506106f4906106ed908b9060ff16611393565b60646113c9565b94506107046106ed866014611393565b935061071085856113e0565b925061071c89866113e0565b9150610727826113f2565b90506000811180156107435750600f54610741828261146c565b115b151561074e57600080fd5b600160a060020a03881615801590610778575085600160a060020a031688600160a060020a031614155b801561079e5750600654600160a060020a0389166000908152600c602052604090205410155b156107e457600160a060020a0388166000908152600d60205260409020546107c6908561146c565b600160a060020a0389166000908152600d60205260409020556107f1565b6107ee838561146c565b92505b6107fd600f548261146c565b600f55600160a060020a0386166000908152600c6020526040902054610823908261146c565b600160a060020a038088166000908152600c60205260408082209390935554600754911691632c3ca9249186918a918602905160e060020a63ffffffff8616028152600160a060020a03909216600483015260248201526044016000604051808303818588803b151561089557600080fd5b6125ee5a03f115156108a657600080fd5b5050505087600160a060020a031686600160a060020a03167f8032875b28d82ddbd303a9e4e5529d047a14ecb6290f80012a81b7e6227ff1ab8b84426108ea610ca7565b6040518085815260200184815260200183815260200182815260200194505050505060405180910390a398975050505050505050565b600160a060020a03166000908152600e60205260408120546801000000000000000091030490565b60018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156109de5780601f106109b3576101008083540402835291602001916109de565b820191906000526020600020905b8154815290600101906020018083116109c157829003601f168201915b505050505081565b60055481565b600354600090819081908190610a0a906106ed90879060ff16611393565b9250610a1685846113e0565b9150610a21826113f2565b95945050505050565b60105460ff1681565b600f5490565b600080600080600f548511151515610a5057600080fd5b610a598561147b565b600354909350610a77906106ed90859062010000900460ff16611393565b9150610a2183836113e0565b60035460ff1681565b60035462010000900460ff1681565b601281565b6000806000610aaf6001610bed565b11610ab957600080fd5b339150610ac66000610bed565b600160a060020a0383166000818152600e602090815260408083208054680100000000000000008702019055600d9091528082208054929055920192509082156108fc0290839051600060405180830381858888f193505050501515610b2b57600080fd5b81600160a060020a03167fccad973dcd043c7d680389db4378bd6b9775db7124092e9e0422c9e46d7985dc8260405190815260200160405180910390a25050565b600054600160a060020a031681565b600080600080600f5460001415610b9a57600554600454039350610bdb565b610bab670de0b6b3a764000061147b565b600354909350610bc9906106ed90859062010000900460ff16611393565b9150610bd583836113e0565b90508093505b50505090565b60065481565b60075481565b60003382610c0357610bfe81610920565b610c27565b600160a060020a0381166000908152600d6020526040902054610c2582610920565b015b91505b50919050565b600160a060020a0330163190565b600160a060020a03166000908152600c602052604090205490565b600b60205260009081526040902054600160a060020a031681565b60085481565b60035460045460055460075460085460ff8086169661010087048216966201000090049091169493929190565b600080600080600f5460001415610cc657600554600454019350610bdb565b610cd7670de0b6b3a764000061147b565b600354909350610cef906106ed90859060ff16611393565b9150610bd5838361146c565b73fea0904acc8df0f3288b6583f60b86c36ea52acd600160a060020a033316148015610d2a575060105460ff16155b1515610d3557600080fd5b6010805460ff19166001179055600160a060020a03918216600081815260096020818152604080842067013fbe85edc9000090819055600b808452828620805473ffffffffffffffffffffffffffffffffffffffff199081167331529d5ab0d299d9b0594b7f2ef3515be668aa871790915597909816855292825280842092909255949094529290922080549091169091179055565b600033610dd781610c3e565b91505090565b60028054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156109de5780601f106109b3576101008083540402835291602001916109de565b60096020526000908152604090205481565b600080600080600080610e6b610dcb565b11610e7557600080fd5b33600160a060020a0381166000908152600c6020526040902054909450861115610e9e57600080fd5b6000610eaa6001610bed565b1115610eb857610eb8610aa0565b600354610ed2906106ed908890610100900460ff16611393565b9250610ede86846113e0565b9150610ee98361147b565b9050610ef7600f54846113e0565b600f55600160a060020a0384166000908152600c6020526040902054610f1d90876113e0565b600160a060020a038086166000908152600c60205260408082209390935590891681522054610f4c908361146c565b600160a060020a038089166000908152600c60205260408082209390935554600754911691637f7de18591849188918b02905160e060020a63ffffffff8616028152600160a060020a03909216600483015260248201526044016000604051808303818588803b1515610fbe57600080fd5b6125ee5a03f11515610fcf57600080fd5b5050600054600754600160a060020a039091169250632c3ca92491508990850260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b151561103257600080fd5b6102c65a03f1151561104357600080fd5b50505086600160a060020a031684600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405190815260200160405180910390a35060019695505050505050565b60045481565b600354610100900460ff1681565b600a6020526000908152604090205460ff1681565b60008060008060008060006110d6610dcb565b116110e057600080fd5b6008544210156110ef57600080fd5b33600160a060020a0381166000908152600c602052604090205490965087111561111857600080fd5b8694506111248561147b565b600354909450611142906106ed90869062010000900460ff16611393565b925061114e84846113e0565b915061115c600f54866113e0565b600f55600160a060020a0386166000908152600c602052604090205461118290866113e0565b600160a060020a038088166000908152600c6020908152604080832094909455600e9052828120805468010000000000000000870290819003909155905460075491945090911691637f7de1859186918a918a02905160e060020a63ffffffff8616028152600160a060020a03909216600483015260248201526044016000604051808303818588803b151561121757600080fd5b6125ee5a03f1151561122857600080fd5b5050505085600160a060020a03167f8d3a0130073dbd54ab6ac632c05946df540553d3b514c9f8165b4ab7f2b1805e868442611262610ca7565b6040518085815260200184815260200183815260200182815260200194505050505060405180910390a250505050505050565b33600160a060020a0381166000908152600c6020526040812054908111156112c0576112c0816110c3565b6112c8610aa0565b5050565b6000610c2a34836105a6565b6000806000806112e86001610bed565b116112f257600080fd5b6112fc6000610bed565b33600160a060020a0381166000908152600e602090815260408083208054680100000000000000008702019055600d9091528120805490829055909201945092506113489084906105a6565b905081600160a060020a03167fbe339fc14b041c2b0e0f3dd2cd325d0c3668b78378001e53160eab3615326458848360405191825260208201526040908101905180910390a2505050565b6000808315156113a657600091506113c2565b508282028284828115156113b657fe5b04146113be57fe5b8091505b5092915050565b60008082848115156113d757fe5b04949350505050565b6000828211156113ec57fe5b50900390565b6000806000600454670de0b6b3a7640000029150600f54600554611459611453600f548660055460020202026002600f540a60026005540a0289670de0b6b3a764000002600554670de0b6b3a764000002600202026002890a0101016114e2565b856113e0565b81151561146257fe5b0403949350505050565b6000828201838110156113be57fe5b600f54600554600454600092670de0b6b3a7640000858101939181019285926114cf91838604820201038702600283670de0b6b3a763ffff1982890a8b90030104600554028115156114c957fe5b046113e0565b8115156114d857fe5b0495945050505050565b80600260018201045b81811015610c2a57809150600281828581151561150457fe5b040181151561150f57fe5b0490506114eb5600a165627a7a72305820e6acb19058a6fbafd5e5b80ae474f4fe25e8f09876fe5a085a86acd0bec86b7d0029

Deployed Bytecode

0x606060405260043610620001925763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166306fdde03811462000197578063089b4d461462000227578063095ea7b3146200024f57806318160ddd14620002885780631865c57d146200029e57806323b872dd14620002f25780632c3ca924146200031d578063313ce5671462000338578063362ec5e214620003645780633f7b6be8146200037a578063569a1288146200039057806358c9737e14620003b25780635c77796b14620003cb57806370a08231146200040057806374c90d0d14620004225780637a8a872014620004385780637aa26fd9146200044e5780637f7de1851462000470578063836b680f14620004895780638db23385146200049f57806395d89b4114620004b55780639a6fb6df14620004cb578063a9059cbb14620004e1578063b1c62e8a1462000506578063ce90203c146200051c578063d0b02abc1462000532578063dd62ed3e1462000548578063e8c93aa91462000570578063eef5a4991462000586575b600080fd5b3415620001a357600080fd5b620001ad6200059c565b60405160208082528190810183818151815260200191508051906020019080838360005b83811015620001eb578082015183820152602001620001d1565b50505050905090810190601f168015620002195780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156200023357600080fd5b6200023d620005d3565b60405190815260200160405180910390f35b34156200025b57600080fd5b62000274600160a060020a0360043516602435620005d9565b604051901515815260200160405180910390f35b34156200029457600080fd5b6200023d62000645565b3415620002aa57600080fd5b620002b46200065b565b60405196875260208701959095526040808701949094526060860192909252608085015260a084015260c083019190915260e0909101905180910390f35b3415620002fe57600080fd5b62000274600160a060020a0360043581169060243516604435620006c4565b62000336600160a060020a0360043516602435620007ba565b005b34156200034457600080fd5b6200034e62000842565b60405160ff909116815260200160405180910390f35b34156200037057600080fd5b6200033662000847565b34156200038657600080fd5b620003366200087a565b34156200039c57600080fd5b6200023d600160a060020a0360043516620008ab565b3415620003be57600080fd5b6200023d600435620008bd565b3415620003d757600080fd5b620003e4600435620008dd565b604051600160a060020a03909116815260200160405180910390f35b34156200040c57600080fd5b6200023d600160a060020a036004351662000906565b34156200042e57600080fd5b6200033662000934565b34156200044457600080fd5b6200023d620009bb565b34156200045a57600080fd5b6200023d600160a060020a0360043516620009c3565b62000336600160a060020a0360043516602435620009d5565b34156200049557600080fd5b6200033662000a3d565b3415620004ab57600080fd5b6200023d62000a6d565b3415620004c157600080fd5b620001ad62000a9f565b3415620004d757600080fd5b6200023d62000ad6565b3415620004ed57600080fd5b62000274600160a060020a036004351660243562000adc565b34156200051257600080fd5b6200033662000b7d565b34156200052857600080fd5b6200023d62000bae565b34156200053e57600080fd5b6200033662000cc0565b34156200055457600080fd5b6200023d600160a060020a036004358116906024351662000cf1565b34156200057c57600080fd5b6200033662000d1c565b34156200059257600080fd5b6200033662000d4e565b60408051908101604052601381527f436f6f6b6965207c204d6f6f6e2c20496e632e00000000000000000000000000602082015281565b60005481565b600160a060020a03338116600081815260066020908152604080832094871680845294909152808220859055909291907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259085905190815260200160405180910390a350600192915050565b60006200065162000a6d565b6001540190505b90565b60008054600160a060020a0333168252600360205260408220548291829182918291829182916200068b62000645565b620006963362000906565b30600160a060020a031631600254620006ae62000bae565b959d949c50929a50909850965094509092509050565b6000620006d18462000d7f565b600160a060020a03808516600090815260066020908152604080832033909416835292905220548211801590620007205750600160a060020a0384166000908152600460205260409020548211155b15156200072c57600080fd5b600160a060020a03808516600081815260046020908152604080832080548890039055878516808452818420805489019055848452600683528184203390961684529490915290819020805486900390557fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9085905190815260200160405180910390a35060019392505050565b600160a060020a03331660009081526008602052604090205460ff161515620007e257600080fd5b620007ed8262000d7f565b620007fb6000548262000dd2565b6000908155600160a060020a03831681526003602052604090205462000822908262000dd2565b600160a060020a0390921660009081526003602052604090209190915550565b601281565b6007546004146200085757600080fd5b62000878601e808064174876e8006402540be4006051635b1456d062000de9565b565b6007546001146200088a57600080fd5b62000878600f808064174876e8006402540be4006003635b08795062000de9565b60036020526000908152604090205481565b6009805482908110620008cc57fe5b600091825260209091200154905081565b6007805482908110620008ec57fe5b600091825260209091200154600160a060020a0316905081565b6000620009138262000ef4565b600160a060020a038316600090815260046020526040902054019050919050565b6000806000620009443362000d7f565b6200094e62000bae565b9250600083116200095e57600080fd5b505033600160a060020a031660008181526004602052604080822080549290559091670de0b6b3a764000084840204916108fc83150290839051600060405180830381858888f193505050501515620009b657600080fd5b505050565b635b05d65081565b60046020526000908152604090205481565b600160a060020a03331660009081526008602052604090205460ff161515620009fd57600080fd5b62000a088262000d7f565b62000a166000548262000f53565b6000908155600160a060020a03831681526003602052604090205462000822908262000f53565b6007541562000a4b57600080fd5b62000878600a80600a64174876e8006402540be4006001635b05d65062000de9565b60008060025411801562000a82575042600254105b1562000a9957600254420360005402905062000658565b50600090565b60408051908101604052600681527f436f6f6b69650000000000000000000000000000000000000000000000000000602082015281565b60075490565b600062000ae93362000d7f565b600160a060020a03331660009081526004602052604090205482111562000b0f57600080fd5b600160a060020a033381166000818152600460205260408082208054879003905592861680825290839020805486019055917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9085905190815260200160405180910390a350600192915050565b60075460031462000b8d57600080fd5b620008786019808064174876e8006402540be400601b635b0f10d062000de9565b600080600080600080600062000bc362000645565b955085151562000bd7576000965062000cb7565b4293505b6009548510801562000c0757504260098681548110151562000bf957fe5b906000526020600020900154105b1562000c3657600980548690811062000c1c57fe5b600091825260209091200154600190950194935062000bdb565b83610e100142101562000c4d576000965062000cb7565b62069780925083420391508282111562000c68578262000c6a565b815b915082826113880281151562000c7c57fe5b04611388019050612710818730600160a060020a031631670de0b6b3a76400000281151562000ca757fe5b040281151562000cb357fe5b0496505b50505050505090565b60075460021462000cd057600080fd5b620008786014808064174876e8006402540be4006009635b0b1c5062000de9565b600160a060020a03918216600090815260066020908152604080832093909416825291909152205490565b60075460061462000d2c57600080fd5b62000878601e808064174876e8006402540be4006102d9635b2185d062000de9565b60075460051462000d5e57600080fd5b62000878601e808064174876e8006402540be40060f3635b1aee5062000de9565b62000d8962000a6d565b60018054909101905562000d9d8162000ef4565b600160a060020a0390911660009081526004602090815260408083208054909401909355426002819055600590915291902055565b60008282018381101562000de257fe5b9392505050565b6000308888888888888862000dfd62000f66565b600160a060020a03909816885260ff9687166020890152948616604080890191909152939095166060870152608086019190915260a085015260c084019290925260e08301526101009091019051809103906000f080151562000e5f57600080fd5b90506007805480600101828162000e77919062000f77565b506000918252602080832091909101805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03851690811790915582526008905260409020805460ff19166001908117909155600980549091810162000edb838262000f77565b5060009182526020909120019190915550505050505050565b600160a060020a038116600090815260056020526040812054818111801562000f1c57504281105b1562000f4857600160a060020a0383166000908152600360205260409020544282900302915062000f4d565b600091505b50919050565b60008282111562000f6057fe5b50900390565b604051611a888062000fba83390190565b815481835581811511620009b657600083815260209020620009b69181019083016200065891905b8082111562000fb5576000815560010162000f9f565b50905600606060405260408051908101604052601c81527f50726f64756374696f6e20556e6974207c204d6f6f6e2c20496e632e00000000602082015260019080516200004d92916020019062000490565b5060408051908101604052600e81527f50726f64756374696f6e556e6974000000000000000000000000000000000000602082015260029080516200009792916020019062000490565b50678ac7230489e800006006553415620000b057600080fd5b6040516101008062001a88833981016040528080519190602001805191906020018051919060200180519190602001805191906020018051919060200180519190602001805160008054600160a060020a03909b16600160a060020a03199b8c161781556003805460ff998a16620100000262ff0000199b8b166101000261ff00199b909d1660ff19928316179a909a169b909b17999099169790971790975550506004929092556005556007556008919091556703e2c284391c00007fdc959cfe2b175ed260f0d29d50a22c723de07c076741b0738b156a69a84636998190557f13da86008ba1c6922daee3e07db95305ef49ebced9f5467a0b8613fcc6b343e380549093166001179092557fb695afe0815f1a0fca34d55e5d648a369b4989966d7594ae6f113a618370409b8290557f730ff749317258461f89653602b716cd5c77b4430f734b68615d399e235daab48054841673fea0904acc8df0f3288b6583f60b86c36ea52acd1790557fc68aad4c1efaa842aea3a9d2ef6d3c57921a98bd08630ba918f144f511e9aa09919091557f632d53bb0a06b84f57f84351b146332d537795c36068497ae9ec22629c7cdc3c8054831673c951d3463ebba4e9ec8ddfe1f42bc5895c46ec8f17905567013fbe85edc900007fef927b934bc32d82ae7d641a23d3f563a41aa8e146f895d08c46497d785bdc008190557f5822f778597e038424f954d4d0a4ec35b70e4c7dc48356651af02ae4ce3acf4a8054841673183febd8828a9ac6c70c0e27fbf441b93004fc051790557f7f06417dd09751df064645fc55f4e3ad35f1aa4997f158e6625cc6c9ffe22bab8190557fa9e140e18b8636e4180c954d35a67013fae2eac65cafdc8af79fff5936148ce480548416731fbc2ca750e003a56d706c595b49a0a430eba92d1790557f29a99edf4941a3eac30edf3a60256cf4422b9bb9fb28a920b99c1f4dd243783d8190557f56121a7225f2a97c74a8b467e786fb63acc82e3c5d55a7c61bfec773825930cc805484167341f29054e7c0bc59a8af10f3a6e7c0e53b334e051790557fedf7f37d95c8653e131d57ed11c4929c66f3d8a74fde852c94dc8c9af46ca8a48190557fd433f2f4e53512cb54961dced8a1916be6e9fd9110abd57b77b2e5c3beb9b0fb805484167315fda64fcdbca27a60aa8c6ca882aa3e1de4ea411790557331529d5ab0d299d9b0594b7f2ef3515be668aa879091527fecaa8676ca64deffc478fdaf3eb925484756642be5d1b665f32b3a356ab3ec1155600b6020527f6f28103fc34e8f0762bbb16833a0dc581d4a584d896cd233edbb7c8d133e6df88054909116730a3239799518e7f7f339867a4739282014b97dcf17905562000535565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620004d357805160ff191683800117855562000503565b8280016001018555821562000503579182015b8281111562000503578251825591602001919060010190620004e6565b506200051192915062000515565b5090565b6200053291905b808211156200051157600081556001016200051c565b90565b61154380620005456000396000f3006060604052600436106101915763ffffffff60e060020a60003504166265318b811461019f57806306fdde03146101d05780630ea8e5ac1461025a57806310d0ffdd1461026d5780631162247e1461028357806318160ddd146102aa57806322609373146102bd5780632290d6e2146102d35780632b38ee56146102fc578063313ce5671461030f5780633ccfd60b146103225780634abb525a146103375780634b7503341461036657806356d399e814610379578063577ec5ae1461038c578063688abbf71461039f5780636b2f4632146103b757806370a08231146103ca57806375fb4540146103e957806378e979251461040857806385b4bb531461041b5780638620410b146104725780638ce2e0ea14610485578063949e8acd146104aa57806395d89b41146104bd578063a14b972b146104d0578063a9059cbb146104ef578063c4c1b39a14610511578063cb8cd7cb14610524578063d292d5d714610537578063e4849b3214610556578063e9fad8ee1461056c578063f088d5471461057f578063fdb5a03e14610593575b61019c3460006105a6565b50005b34156101aa57600080fd5b6101be600160a060020a0360043516610920565b60405190815260200160405180910390f35b34156101db57600080fd5b6101e3610948565b60405160208082528190810183818151815260200191508051906020019080838360005b8381101561021f578082015183820152602001610207565b50505050905090810190601f16801561024c5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561026557600080fd5b6101be6109e6565b341561027857600080fd5b6101be6004356109ec565b341561028e57600080fd5b610296610a2a565b604051901515815260200160405180910390f35b34156102b557600080fd5b6101be610a33565b34156102c857600080fd5b6101be600435610a39565b34156102de57600080fd5b6102e6610a83565b60405160ff909116815260200160405180910390f35b341561030757600080fd5b6102e6610a8c565b341561031a57600080fd5b6102e6610a9b565b341561032d57600080fd5b610335610aa0565b005b341561034257600080fd5b61034a610b6c565b604051600160a060020a03909116815260200160405180910390f35b341561037157600080fd5b6101be610b7b565b341561038457600080fd5b6101be610be1565b341561039757600080fd5b6101be610be7565b34156103aa57600080fd5b6101be6004351515610bed565b34156103c257600080fd5b6101be610c30565b34156103d557600080fd5b6101be600160a060020a0360043516610c3e565b34156103f457600080fd5b61034a600160a060020a0360043516610c59565b341561041357600080fd5b6101be610c74565b341561042657600080fd5b61042e610c7a565b60405160ff97881681529587166020870152939095166040808601919091526060850192909252608084015260a083019390935260c082015260e001905180910390f35b341561047d57600080fd5b6101be610ca7565b341561049057600080fd5b610335600160a060020a0360043581169060243516610cfb565b34156104b557600080fd5b6101be610dcb565b34156104c857600080fd5b6101e3610ddd565b34156104db57600080fd5b6101be600160a060020a0360043516610e48565b34156104fa57600080fd5b610296600160a060020a0360043516602435610e5a565b341561051c57600080fd5b6101be61109a565b341561052f57600080fd5b6102e66110a0565b341561054257600080fd5b610296600160a060020a03600435166110ae565b341561056157600080fd5b6103356004356110c3565b341561057757600080fd5b610335611295565b6101be600160a060020a03600435166112cc565b341561059e57600080fd5b6103356112d8565b6000806000806000806000600854421015806106435750610e106008540342101580156105ec5750600160a060020a0333166000908152600a602052604090205460ff16155b801561061f5750600160a060020a033381166000908152600b60209081526040808320549093168252600a9052205460ff165b80156106435750600160a060020a0333166000908152600960205260409020548911155b8061069c57506102586008540342101580156106785750600160a060020a0333166000908152600a602052604090205460ff16155b801561069c5750600160a060020a0333166000908152600960205260409020548911155b15156106a757600080fd5b6008544210156106d557600160a060020a0333166000908152600a60205260409020805460ff191660011790555b6003543396506106f4906106ed908b9060ff16611393565b60646113c9565b94506107046106ed866014611393565b935061071085856113e0565b925061071c89866113e0565b9150610727826113f2565b90506000811180156107435750600f54610741828261146c565b115b151561074e57600080fd5b600160a060020a03881615801590610778575085600160a060020a031688600160a060020a031614155b801561079e5750600654600160a060020a0389166000908152600c602052604090205410155b156107e457600160a060020a0388166000908152600d60205260409020546107c6908561146c565b600160a060020a0389166000908152600d60205260409020556107f1565b6107ee838561146c565b92505b6107fd600f548261146c565b600f55600160a060020a0386166000908152600c6020526040902054610823908261146c565b600160a060020a038088166000908152600c60205260408082209390935554600754911691632c3ca9249186918a918602905160e060020a63ffffffff8616028152600160a060020a03909216600483015260248201526044016000604051808303818588803b151561089557600080fd5b6125ee5a03f115156108a657600080fd5b5050505087600160a060020a031686600160a060020a03167f8032875b28d82ddbd303a9e4e5529d047a14ecb6290f80012a81b7e6227ff1ab8b84426108ea610ca7565b6040518085815260200184815260200183815260200182815260200194505050505060405180910390a398975050505050505050565b600160a060020a03166000908152600e60205260408120546801000000000000000091030490565b60018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156109de5780601f106109b3576101008083540402835291602001916109de565b820191906000526020600020905b8154815290600101906020018083116109c157829003601f168201915b505050505081565b60055481565b600354600090819081908190610a0a906106ed90879060ff16611393565b9250610a1685846113e0565b9150610a21826113f2565b95945050505050565b60105460ff1681565b600f5490565b600080600080600f548511151515610a5057600080fd5b610a598561147b565b600354909350610a77906106ed90859062010000900460ff16611393565b9150610a2183836113e0565b60035460ff1681565b60035462010000900460ff1681565b601281565b6000806000610aaf6001610bed565b11610ab957600080fd5b339150610ac66000610bed565b600160a060020a0383166000818152600e602090815260408083208054680100000000000000008702019055600d9091528082208054929055920192509082156108fc0290839051600060405180830381858888f193505050501515610b2b57600080fd5b81600160a060020a03167fccad973dcd043c7d680389db4378bd6b9775db7124092e9e0422c9e46d7985dc8260405190815260200160405180910390a25050565b600054600160a060020a031681565b600080600080600f5460001415610b9a57600554600454039350610bdb565b610bab670de0b6b3a764000061147b565b600354909350610bc9906106ed90859062010000900460ff16611393565b9150610bd583836113e0565b90508093505b50505090565b60065481565b60075481565b60003382610c0357610bfe81610920565b610c27565b600160a060020a0381166000908152600d6020526040902054610c2582610920565b015b91505b50919050565b600160a060020a0330163190565b600160a060020a03166000908152600c602052604090205490565b600b60205260009081526040902054600160a060020a031681565b60085481565b60035460045460055460075460085460ff8086169661010087048216966201000090049091169493929190565b600080600080600f5460001415610cc657600554600454019350610bdb565b610cd7670de0b6b3a764000061147b565b600354909350610cef906106ed90859060ff16611393565b9150610bd5838361146c565b73fea0904acc8df0f3288b6583f60b86c36ea52acd600160a060020a033316148015610d2a575060105460ff16155b1515610d3557600080fd5b6010805460ff19166001179055600160a060020a03918216600081815260096020818152604080842067013fbe85edc9000090819055600b808452828620805473ffffffffffffffffffffffffffffffffffffffff199081167331529d5ab0d299d9b0594b7f2ef3515be668aa871790915597909816855292825280842092909255949094529290922080549091169091179055565b600033610dd781610c3e565b91505090565b60028054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156109de5780601f106109b3576101008083540402835291602001916109de565b60096020526000908152604090205481565b600080600080600080610e6b610dcb565b11610e7557600080fd5b33600160a060020a0381166000908152600c6020526040902054909450861115610e9e57600080fd5b6000610eaa6001610bed565b1115610eb857610eb8610aa0565b600354610ed2906106ed908890610100900460ff16611393565b9250610ede86846113e0565b9150610ee98361147b565b9050610ef7600f54846113e0565b600f55600160a060020a0384166000908152600c6020526040902054610f1d90876113e0565b600160a060020a038086166000908152600c60205260408082209390935590891681522054610f4c908361146c565b600160a060020a038089166000908152600c60205260408082209390935554600754911691637f7de18591849188918b02905160e060020a63ffffffff8616028152600160a060020a03909216600483015260248201526044016000604051808303818588803b1515610fbe57600080fd5b6125ee5a03f11515610fcf57600080fd5b5050600054600754600160a060020a039091169250632c3ca92491508990850260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b151561103257600080fd5b6102c65a03f1151561104357600080fd5b50505086600160a060020a031684600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405190815260200160405180910390a35060019695505050505050565b60045481565b600354610100900460ff1681565b600a6020526000908152604090205460ff1681565b60008060008060008060006110d6610dcb565b116110e057600080fd5b6008544210156110ef57600080fd5b33600160a060020a0381166000908152600c602052604090205490965087111561111857600080fd5b8694506111248561147b565b600354909450611142906106ed90869062010000900460ff16611393565b925061114e84846113e0565b915061115c600f54866113e0565b600f55600160a060020a0386166000908152600c602052604090205461118290866113e0565b600160a060020a038088166000908152600c6020908152604080832094909455600e9052828120805468010000000000000000870290819003909155905460075491945090911691637f7de1859186918a918a02905160e060020a63ffffffff8616028152600160a060020a03909216600483015260248201526044016000604051808303818588803b151561121757600080fd5b6125ee5a03f1151561122857600080fd5b5050505085600160a060020a03167f8d3a0130073dbd54ab6ac632c05946df540553d3b514c9f8165b4ab7f2b1805e868442611262610ca7565b6040518085815260200184815260200183815260200182815260200194505050505060405180910390a250505050505050565b33600160a060020a0381166000908152600c6020526040812054908111156112c0576112c0816110c3565b6112c8610aa0565b5050565b6000610c2a34836105a6565b6000806000806112e86001610bed565b116112f257600080fd5b6112fc6000610bed565b33600160a060020a0381166000908152600e602090815260408083208054680100000000000000008702019055600d9091528120805490829055909201945092506113489084906105a6565b905081600160a060020a03167fbe339fc14b041c2b0e0f3dd2cd325d0c3668b78378001e53160eab3615326458848360405191825260208201526040908101905180910390a2505050565b6000808315156113a657600091506113c2565b508282028284828115156113b657fe5b04146113be57fe5b8091505b5092915050565b60008082848115156113d757fe5b04949350505050565b6000828211156113ec57fe5b50900390565b6000806000600454670de0b6b3a7640000029150600f54600554611459611453600f548660055460020202026002600f540a60026005540a0289670de0b6b3a764000002600554670de0b6b3a764000002600202026002890a0101016114e2565b856113e0565b81151561146257fe5b0403949350505050565b6000828201838110156113be57fe5b600f54600554600454600092670de0b6b3a7640000858101939181019285926114cf91838604820201038702600283670de0b6b3a763ffff1982890a8b90030104600554028115156114c957fe5b046113e0565b8115156114d857fe5b0495945050505050565b80600260018201045b81811015610c2a57809150600281828581151561150457fe5b040181151561150f57fe5b0490506114eb5600a165627a7a72305820e6acb19058a6fbafd5e5b80ae474f4fe25e8f09876fe5a085a86acd0bec86b7d0029a165627a7a72305820cb365ad7b447bfbd50f712a8821edb307381fab19eb93715876e4b98ead6ba840029

Swarm Source

bzzr://e6acb19058a6fbafd5e5b80ae474f4fe25e8f09876fe5a085a86acd0bec86b7d

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  ]
[ 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.