Contract 0x215ce36e90b1b64e6fa2e358305177f8fe5daf25

 

TxHash Block Age From To Value [TxFee]
0x46e1eab99a1611cc6b2105215c9ffff56606473a584e9901189b5900d7493f5973669686 days 12 hrs ago0x2c6178d1234b4c72357f76134d27d0a50f0adaef IN 333ETH_20 Ether0.000280401
0x2648a5c01432533a3fe166192dfee694ea604da3770df7146eac5de2fe0c76b0724616128 days 2 hrs ago0x477f7f4bc76ae35eefb7895af37de846400680dd IN 333ETH_20 Ether0.000152946
0x1dd6f00f88c01be9eedb0ee6f9086d9f6eb872b81fa442caba1d936b2d2809fb720246238 days 12 hrs ago0x7a9029dbcc4456242bb0880e10f31845d52ef8bd IN 333ETH_20 Ether0.000105
0xe3815db028ab7cc82f309ea0b0c6041c4f4ff0a44cc3ef7666a3ba5696016625719692839 days 16 hrs ago0x18f0f095a5dac83655ceb70d36f43073c5fc6fb4 IN 333ETH_20 Ether0.000063
0x0864961128d1772542bb531c243faab1c36dbf8f98d8ca8348805c3d994821be714325550 days 15 hrs ago0x97f62ab92f99e82f55a449aa0cb3d4e1835cc20a IN 333ETH_20 Ether0.000203928
0x7f3996da0e11b91b7f9dcef21c392508390b0f131ae6c871aa70939a3b38834a714076751 days 3 hrs ago0xee934c2cd888e6b216081bf95ac93813ef28f724 IN 333ETH_20 Ether0.000050982
0x9b5affa21cd6ee3ef14ff55f156def67b91b243ce591fcc0d541c0000a24fe55712709453 days 21 hrs ago0x916e374b7348e2e6b9e7cdd7d2f5079f72950c31 IN 333ETH_20 Ether0.000199339626
0x92d8484812f941128d5ace8711646dae3b2d14c10c011dd92ad95cffd9569df6712214754 days 20 hrs ago0x5724ac2d8d62d28ba60fb458a3e8f0f0d1c76bbd IN 333ETH_20 Ether0.000152946
0xbbee2e5c49da6f6fdae94833b49179d87dae10ddfabc4a0c5ae4b00a0298e054707142464 days 7 hrs ago0x3021158afd040101bbb49b9a73b058ba9a3196cd IN 333ETH_20 Ether0.00025491
0xfb845047982f7f19bacdce6638b17f1885a55ce470e24320b80680fef9e95031705881166 days 13 hrs ago0x3021158afd040101bbb49b9a73b058ba9a3196cd IN 333ETH_20 Ether0.00025491
0x2242e72d4464a15bdf0774ae109b06a657558d2f50399093c89739ddefbd2c9c705404467 days 10 hrs ago0x7a9029dbcc4456242bb0880e10f31845d52ef8bd IN 333ETH_20 Ether0.00050982
0x4104ce413283fe1be99c9c2479aba6194b5128f47c595f85fe3600267f512c73704870368 days 9 hrs ago0x4085fbf6c8236180410ecfc34f8ca77db4034b3d IN 333ETH_20 Ether0.000214839
0x389b5a6d2140225cb97a367af0881d120fa5c64ae25ba9ebe11075c5846c8146704358869 days 6 hrs ago0xb1d7f3d36bba17d027af362d5e93cd3fd29ffdf2 IN 333ETH_20 Ether0.000063
0xbd7d67ec6d30a18bb172fa03eaec2f29cdad330440c3c3228e8efbd414b2df72704267169 days 10 hrs ago0x4085fbf6c8236180410ecfc34f8ca77db4034b3d IN 333ETH_20 Ether0.000235134
0x9251d7b1d2fbafad6a2750fd5fe2eaa1a1eec65b52a1faf7ad32b4edad043f5c703191471 days 9 hrs ago0x3021158afd040101bbb49b9a73b058ba9a3196cd IN 333ETH_20 Ether0.00042
0x23b4dbaa8de5127209d29407887f8e500d9ecb2b18b7104609b0edb56f615545703189471 days 9 hrs ago0x3021158afd040101bbb49b9a73b058ba9a3196cd IN 333ETH_20 Ether0.00050982
0xc577c3450ccba08f709e9e81421cc3e3d570d018047daf097d4d7dccb1d952cb701389074 days 14 hrs ago0xef4b0f95ec4792a5a28030463ff2208e0dbe2910 IN 333ETH_20 Ether0.000025491
0x8151382b46f2cd4e696533027954beddc517574f42d2bc0278a36894d45cb00d701071875 days 4 hrs ago0xaae291def326cae5737c33183f274a81191185b5 IN 333ETH_20.01 Ether0.000139328
0x7be8d813cea0abfa8e227f8d3ec96c7a65c6b5ee17ae5c89062987cb303d59d9700822075 days 15 hrs ago0x65bdd9813be74425622b5c41e4cf5ea580fbb82f IN 333ETH_20 Ether0.001045131
0x640eef6d3497fb84d52baae19a898bafdc71dc67b031f3cd21471d186b64e570700632575 days 23 hrs ago0x258d756213c3b5d99c090118dc3ae17dc913f8dc IN 333ETH_20 Ether0.000025491
0x481e6536326c52d01d9f0c1a5c6227fb59b42e01791ed92b6ed93427ec4cdf80700538776 days 3 hrs ago0xbc40918765a651985bef84f2d7c571a290ce25a4 IN 333ETH_20 Ether0.000025491
0x2aff121bcfe6f1e5b05ab7927c414247f5091d0f6e557eb0ef108724351ff5dc700530376 days 3 hrs ago0x637705f86574ab7e323e17cb3472ef51fc55b86e IN 333ETH_20 Ether0.000021
0x316beaa5c1f72e3fe126a4c80ce0df2326746dc606626a42a15b9022dfe44132700522176 days 4 hrs ago0x17dc2801de0959ddb53c576dd6d015efea3fb728 IN 333ETH_20 Ether0.000021
0xf6ee07d0971eeed9c4e1eafbf14fd0bf0004753b99a31f99b8e80831445afb54700521076 days 4 hrs ago0x32e26036dfac4c95feff9df273c39dcf3b35db93 IN 333ETH_20 Ether0.000025491
0xa1763908dace13a924ca35c3bb2e335a0895dae9c5c2cdd5b7a18b8e6bdecee1700505876 days 4 hrs ago0x2fa4f0913f2c98953a877f5ab1264238e2261afe IN 333ETH_20 Ether0.000025491
[ Download CSV Export 

Latest 25 internal transaction, Click here to view more Internal Transactions as a result of Contract Execution

Parent TxHash Block Age From To Value
0x8151382b46f2cd4e696533027954beddc517574f42d2bc0278a36894d45cb00d701071875 days 4 hrs ago0x215ce36e90b1b64e6fa2e358305177f8fe5daf250xd3b9ca15996766d9856f3895cd67d186187113dd0.0005 Ether
0x8151382b46f2cd4e696533027954beddc517574f42d2bc0278a36894d45cb00d701071875 days 4 hrs ago0x215ce36e90b1b64e6fa2e358305177f8fe5daf250xf4d27660abb9d9f3bbc0388cb721d4712e53999d0.00075 Ether
0x4214bc61bb9a2b480b473b9a20a9622562eade827822ab72546375796cce12fd699492577 days 22 hrs ago0x215ce36e90b1b64e6fa2e358305177f8fe5daf250x8cdb7313ef7a83a01081b5e64275d69e2a4f9d6b0.011120702735730506 Ether
0x4214bc61bb9a2b480b473b9a20a9622562eade827822ab72546375796cce12fd699492577 days 22 hrs ago0x215ce36e90b1b64e6fa2e358305177f8fe5daf25  Contract Creation0 Ether
0x2f9a075e2662b1ff4ad701b656eb7771472f06a153e0ff254d4eb0da0b637641699484577 days 23 hrs ago0x215ce36e90b1b64e6fa2e358305177f8fe5daf250x48f4ec26820d80a2e0b620a1fe9c9293b328d46a0.0023656875 Ether
0xe4415769c3965b4dec209f27de6c89589aceff074d7c0ca917e29e2f087b9863699456678 days 18 mins ago0x215ce36e90b1b64e6fa2e358305177f8fe5daf250xa18fb8bf2db2829d000bd0910c3b341c0003745f0.00074552595 Ether
0x94d90650ee4cec9dc83ec0b29274843e22db9ffea376e353eec4b9d3483644fa699432678 days 1 hr ago0x215ce36e90b1b64e6fa2e358305177f8fe5daf250x477f7f4bc76ae35eefb7895af37de846400680dd0.00185 Ether
0x9e9ad656e6b0ee819f7c8b94f166b656b5242be2e9506cdb2e0aa788dd9e7cbc699404178 days 2 hrs ago0x215ce36e90b1b64e6fa2e358305177f8fe5daf250xa18fb8bf2db2829d000bd0910c3b341c0003745f0.000372762975 Ether
0x43f1b4640e1428c65644cede5c93eeb9d07e9858aaf19373eb58fc8fe7be7eca699400078 days 2 hrs ago0x215ce36e90b1b64e6fa2e358305177f8fe5daf250x7233358d60f76d6d91d89738af465b73bf379e130.00005177595 Ether
0x501f8ca510ffca009d4a1f1cf5df18e1dc805c88b6e3eb719550a8395dfceb3d699378178 days 3 hrs ago0x215ce36e90b1b64e6fa2e358305177f8fe5daf250xa18fb8bf2db2829d000bd0910c3b341c0003745f0.0004348901375 Ether
0x0fe8b79b6d210834b2335b6ff111b3b5d6f1b4020fa27d7e4b241194156cd827699362778 days 4 hrs ago0x215ce36e90b1b64e6fa2e358305177f8fe5daf250xb37e16a835acd6f480016f5a0e45f97a72d55b0a0.003693351701608697 Ether
0x2725a144954442b4dc1c440c7924617a5ca09399f372925e2698997bdf34b9d6699356478 days 4 hrs ago0x215ce36e90b1b64e6fa2e358305177f8fe5daf250xb63ec73faf02a2d07d842b96cb13873dc8ff0f3c0.001205312623623785 Ether
0xa090547e15cb0f7472f7380f1e1feecc6cb4d68b1bb6d723c99231c8a5fff71b699345078 days 4 hrs ago0x215ce36e90b1b64e6fa2e358305177f8fe5daf250x7233358d60f76d6d91d89738af465b73bf379e130.001803528925 Ether
0x3a88ae8ad756218e4acc1217b9e48650dc04197c2e6a9b9910e6f972756dde3f699344478 days 4 hrs ago0x215ce36e90b1b64e6fa2e358305177f8fe5daf250xa18fb8bf2db2829d000bd0910c3b341c0003745f0.016277316575 Ether
0x5bf9c2d0e23acfa5468c4d9ec93ae2401db9281a2683fb7f68970ae4ad66b4c2699339578 days 5 hrs ago0x215ce36e90b1b64e6fa2e358305177f8fe5daf250xb8169e5444841c4c125d8f2714604bc2416382470.003894006760600805 Ether
0x6fb6c4b9067a639be0362750273e9ec360feb4111187496472910db56b728855699324478 days 5 hrs ago0x215ce36e90b1b64e6fa2e358305177f8fe5daf250x477f7f4bc76ae35eefb7895af37de846400680dd0.001776 Ether
0xdcd3908500a58817a1df4bbee83099d67db87e3dd2cb717a02b0f6839927d9c3699312078 days 6 hrs ago0x215ce36e90b1b64e6fa2e358305177f8fe5daf250xeb5bf0e93cadb3fc480306f8e76335c99a9a50ef0.010927731044936781 Ether
0xae2757e88337a390d2690df4eccc208b5be63a79f2a352fe04c54b684215ee92699221078 days 9 hrs ago0x215ce36e90b1b64e6fa2e358305177f8fe5daf250x477f7f4bc76ae35eefb7895af37de846400680dd0.022718 Ether
0xa08e2382a0c27cfbf0a983aaa582ce0bec9e31b55db442db29dc1107d25f32a4699158878 days 12 hrs ago0x215ce36e90b1b64e6fa2e358305177f8fe5daf250xb63ec73faf02a2d07d842b96cb13873dc8ff0f3c0.011083635647670901 Ether
0xb8d650cb0c1a85ccea2629296d3817d897128dfdf23c9597ad08d079f221cae0699114778 days 13 hrs ago0x215ce36e90b1b64e6fa2e358305177f8fe5daf250xeb5bf0e93cadb3fc480306f8e76335c99a9a50ef0.014182799866832843 Ether
0x181d8e565e51a7aa816c81163f1637d878d5a81fa7122ab005661bf4903809c8699027578 days 17 hrs ago0x215ce36e90b1b64e6fa2e358305177f8fe5daf250xb8169e5444841c4c125d8f2714604bc2416382470.00515829466988678 Ether
0x6959e8cdb96b258153f3c0a59251f6bc6f82d7aaa73584d2653aa5a7b7e01b33698869879 days 16 mins ago0x215ce36e90b1b64e6fa2e358305177f8fe5daf250xeb5bf0e93cadb3fc480306f8e76335c99a9a50ef0.015810334277780875 Ether
0x14c354baeab25cb170245155ad5c56dbf495936e5af99399a915604845d33052698857379 days 44 mins ago0x215ce36e90b1b64e6fa2e358305177f8fe5daf250x0944807ade36dc625868fe149153312a5c1d0f2e0.000372762975 Ether
0x19d1f37e99a8d8a5d1ffeb5936049cbc87342e6088c789b6736540d3b9bb97c7698766979 days 4 hrs ago0x215ce36e90b1b64e6fa2e358305177f8fe5daf250x3021158afd040101bbb49b9a73b058ba9a3196cd0.009485875 Ether
0xd93ea397ead6b1bfe3a95bec41d6ac49962f85f699337533a597399cf19e48a3698732979 days 5 hrs ago0x215ce36e90b1b64e6fa2e358305177f8fe5daf250xb37e16a835acd6f480016f5a0e45f97a72d55b0a0.031952351892206825 Ether
[ Download CSV Export 

Contract Source Code Verified (Exact Match)

Contract Name:
Revolution2

Compiler Version
v0.4.25+commit.59dbf8f1

Optimization Enabled:
Yes

Runs (Optimizer):
200

Contract Source Code

pragma solidity 0.4.25;


/**
*
* ETH CRYPTOCURRENCY DISTRIBUTION PROJECT v 2.0
* Web              - https://333eth.io
* GitHub           - https://github.com/Revolution333/
* Twitter          - https://twitter.com/333eth_io
* Youtube          - https://www.youtube.com/c/333eth
* Discord          - https://discord.gg/P87buwT
* Telegram_channel - https://t.me/Ethereum333
* EN  Telegram_chat: https://t.me/Ethereum333_chat_en
* RU  Telegram_chat: https://t.me/Ethereum333_chat_ru
* KOR Telegram_chat: https://t.me/Ethereum333_chat_kor
* CN  Telegram_chat: https://t.me/Ethereum333_chat_cn
* Email:             mailto:support(at sign)333eth.io
* 
* 
*  - GAIN 3,33% - 1% PER 24 HOURS (interest is charges in equal parts every 10 min)
*  - Life-long payments
*  - The revolutionary reliability
*  - Minimal contribution 0.01 eth
*  - Currency and payment - ETH
*  - Contribution allocation schemes:
*    -- 87,5% payments
*    --  7,5% marketing
*    --  5,0% technical support
*
*   ---About the Project
*  Blockchain-enabled smart contracts have opened a new era of trustless relationships without 
*  intermediaries. This technology opens incredible financial possibilities. Our automated investment 
*  distribution model is written into a smart contract, uploaded to the Ethereum blockchain and can be 
*  freely accessed online. In order to insure our investors' complete security, full control over the 
*  project has been transferred from the organizers to the smart contract: nobody can influence the 
*  system's permanent autonomous functioning.
* 
* ---How to use:
*  1. Send from ETH wallet to the smart contract address 0x311f71389e3DE68f7B2097Ad02c6aD7B2dDE4C71
*     any amount from 0.01 ETH.
*  2. Verify your transaction in the history of your application or etherscan.io, specifying the address 
*     of your wallet.
*  3a. Claim your profit by sending 0 ether transaction (every 10 min, every day, every week, i don't care unless you're 
*      spending too much on GAS)
*  OR
*  3b. For reinvest, you need to deposit the amount that you want to reinvest and the 
*      accrued interest automatically summed to your new contribution.
*  
* RECOMMENDED GAS LIMIT: 200000
* RECOMMENDED GAS PRICE: https://ethgasstation.info/
* You can check the payments on the etherscan.io site, in the "Internal Txns" tab of your wallet.
*
* ---Refferral system:
*     from 0 to 10.000 ethers in the fund - remuneration to each contributor is 3.33%, 
*     from 10.000 to 100.000 ethers in the fund - remuneration will be 2%, 
*     from 100.000 ethers in the fund - each contributor will get 1%.
*
* ---It is not allowed to transfer from exchanges, only from your personal ETH wallet, for which you 
* have private keys.
* 
* Contracts reviewed and approved by pros!
* 
* Main contract - Revolution2. Scroll down to find it.
*/ 


library Math {
  function min(uint a, uint b) internal pure returns(uint) {
    if (a > b) {
      return b;
    }
    return a;
  }
}


library Zero {
  function requireNotZero(address addr) internal pure {
    require(addr != address(0), "require not zero address");
  }

  function requireNotZero(uint val) internal pure {
    require(val != 0, "require not zero value");
  }

  function notZero(address addr) internal pure returns(bool) {
    return !(addr == address(0));
  }

  function isZero(address addr) internal pure returns(bool) {
    return addr == address(0);
  }

  function isZero(uint a) internal pure returns(bool) {
    return a == 0;
  }

  function notZero(uint a) internal pure returns(bool) {
    return a != 0;
  }
}


library Percent {
  // Solidity automatically throws when dividing by 0
  struct percent {
    uint num;
    uint den;
  }
  
  // storage
  function mul(percent storage p, uint a) internal view returns (uint) {
    if (a == 0) {
      return 0;
    }
    return a*p.num/p.den;
  }

  function div(percent storage p, uint a) internal view returns (uint) {
    return a/p.num*p.den;
  }

  function sub(percent storage p, uint a) internal view returns (uint) {
    uint b = mul(p, a);
    if (b >= a) {
      return 0;
    }
    return a - b;
  }

  function add(percent storage p, uint a) internal view returns (uint) {
    return a + mul(p, a);
  }

  function toMemory(percent storage p) internal view returns (Percent.percent memory) {
    return Percent.percent(p.num, p.den);
  }

  // memory 
  function mmul(percent memory p, uint a) internal pure returns (uint) {
    if (a == 0) {
      return 0;
    }
    return a*p.num/p.den;
  }

  function mdiv(percent memory p, uint a) internal pure returns (uint) {
    return a/p.num*p.den;
  }

  function msub(percent memory p, uint a) internal pure returns (uint) {
    uint b = mmul(p, a);
    if (b >= a) {
      return 0;
    }
    return a - b;
  }

  function madd(percent memory p, uint a) internal pure returns (uint) {
    return a + mmul(p, a);
  }
}


library Address {
  function toAddress(bytes source) internal pure returns(address addr) {
    assembly { addr := mload(add(source,0x14)) }
    return addr;
  }

  function isNotContract(address addr) internal view returns(bool) {
    uint length;
    assembly { length := extcodesize(addr) }
    return length == 0;
  }
}


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

  /**
  * @dev Multiplies two numbers, reverts on overflow.
  */
  function mul(uint256 _a, uint256 _b) internal pure returns (uint256) {
    // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
    // benefit is lost if 'b' is also tested.
    // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522
    if (_a == 0) {
      return 0;
    }

    uint256 c = _a * _b;
    require(c / _a == _b);

    return c;
  }

  /**
  * @dev Integer division of two numbers truncating the quotient, reverts on division by zero.
  */
  function div(uint256 _a, uint256 _b) internal pure returns (uint256) {
    require(_b > 0); // Solidity only automatically asserts 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 Subtracts two numbers, reverts on overflow (i.e. if subtrahend is greater than minuend).
  */
  function sub(uint256 _a, uint256 _b) internal pure returns (uint256) {
    require(_b <= _a);
    uint256 c = _a - _b;

    return c;
  }

  /**
  * @dev Adds two numbers, reverts on overflow.
  */
  function add(uint256 _a, uint256 _b) internal pure returns (uint256) {
    uint256 c = _a + _b;
    require(c >= _a);

    return c;
  }

  /**
  * @dev Divides two numbers and returns the remainder (unsigned integer modulo),
  * reverts when dividing by zero.
  */
  function mod(uint256 a, uint256 b) internal pure returns (uint256) {
    require(b != 0);
    return a % b;
  }
}


contract Accessibility {
  address private owner;
  modifier onlyOwner() {
    require(msg.sender == owner, "access denied");
    _;
  }

  constructor() public {
    owner = msg.sender;
  }

  function disown() internal {
    delete owner;
  }
}


contract Rev1Storage {
  function investorShortInfo(address addr) public view returns(uint value, uint refBonus); 
}


contract Rev2Storage {
  function investorInfo(address addr) public view returns(uint investment, uint paymentTime); 
}


library PrivateEntrance {
  using PrivateEntrance for privateEntrance;
  using Math for uint;
  struct privateEntrance {
    Rev1Storage rev1Storage;
    Rev2Storage rev2Storage;
    uint investorMaxInvestment;
    uint endTimestamp;
    mapping(address=>bool) hasAccess;
  }

  function isActive(privateEntrance storage pe) internal view returns(bool) {
    return pe.endTimestamp > now;
  }

  function maxInvestmentFor(privateEntrance storage pe, address investorAddr) internal view returns(uint) {
    // check if investorAddr has access
    if (!pe.hasAccess[investorAddr]) {
      return 0;
    }

    // get investor max investment = investment from revolution 1
    (uint maxInvestment, ) = pe.rev1Storage.investorShortInfo(investorAddr);
    if (maxInvestment == 0) {
      return 0;
    }
    maxInvestment = Math.min(maxInvestment, pe.investorMaxInvestment);

    // get current investment from revolution 2
    (uint currInvestment, ) = pe.rev2Storage.investorInfo(investorAddr);
    
    if (currInvestment >= maxInvestment) {
      return 0;
    }

    return maxInvestment-currInvestment;
  }

  function provideAccessFor(privateEntrance storage pe, address[] addrs) internal {
    for (uint16 i; i < addrs.length; i++) {
      pe.hasAccess[addrs[i]] = true;
    }
  }
}


contract InvestorsStorage is Accessibility {
  struct Investor {
    uint investment;
    uint paymentTime;
  }
  uint public size;

  mapping (address => Investor) private investors;

  function isInvestor(address addr) public view returns (bool) {
    return investors[addr].investment > 0;
  }

  function investorInfo(address addr) public view returns(uint investment, uint paymentTime) {
    investment = investors[addr].investment;
    paymentTime = investors[addr].paymentTime;
  }

  function newInvestor(address addr, uint investment, uint paymentTime) public onlyOwner returns (bool) {
    Investor storage inv = investors[addr];
    if (inv.investment != 0 || investment == 0) {
      return false;
    }
    inv.investment = investment;
    inv.paymentTime = paymentTime;
    size++;
    return true;
  }

  function addInvestment(address addr, uint investment) public onlyOwner returns (bool) {
    if (investors[addr].investment == 0) {
      return false;
    }
    investors[addr].investment += investment;
    return true;
  }

  function setPaymentTime(address addr, uint paymentTime) public onlyOwner returns (bool) {
    if (investors[addr].investment == 0) {
      return false;
    }
    investors[addr].paymentTime = paymentTime;
    return true;
  }
}


library RapidGrowthProtection {
  using RapidGrowthProtection for rapidGrowthProtection;
  
  struct rapidGrowthProtection {
    uint startTimestamp;
    uint maxDailyTotalInvestment;
    uint8 activityDays;
    mapping(uint8 => uint) dailyTotalInvestment;
  }

  function maxInvestmentAtNow(rapidGrowthProtection storage rgp) internal view returns(uint) {
    uint day = rgp.currDay();
    if (day == 0 || day > rgp.activityDays) {
      return 0;
    }
    if (rgp.dailyTotalInvestment[uint8(day)] >= rgp.maxDailyTotalInvestment) {
      return 0;
    }
    return rgp.maxDailyTotalInvestment - rgp.dailyTotalInvestment[uint8(day)];
  }

  function isActive(rapidGrowthProtection storage rgp) internal view returns(bool) {
    uint day = rgp.currDay();
    return day != 0 && day <= rgp.activityDays;
  }

  function saveInvestment(rapidGrowthProtection storage rgp, uint investment) internal returns(bool) {
    uint day = rgp.currDay();
    if (day == 0 || day > rgp.activityDays) {
      return false;
    }
    if (rgp.dailyTotalInvestment[uint8(day)] + investment > rgp.maxDailyTotalInvestment) {
      return false;
    }
    rgp.dailyTotalInvestment[uint8(day)] += investment;
    return true;
  }

  function startAt(rapidGrowthProtection storage rgp, uint timestamp) internal { 
    rgp.startTimestamp = timestamp;

    // restart
    for (uint8 i = 1; i <= rgp.activityDays; i++) {
      if (rgp.dailyTotalInvestment[i] != 0) {
        delete rgp.dailyTotalInvestment[i];
      }
    }
  }

  function currDay(rapidGrowthProtection storage rgp) internal view returns(uint day) {
    if (rgp.startTimestamp > now) {
      return 0;
    }
    day = (now - rgp.startTimestamp) / 24 hours + 1; // +1 for skip zero day
  }
}








contract Revolution2 is Accessibility {
  using RapidGrowthProtection for RapidGrowthProtection.rapidGrowthProtection;
  using PrivateEntrance for PrivateEntrance.privateEntrance;
  using Percent for Percent.percent;
  using SafeMath for uint;
  using Math for uint;

  // easy read for investors
  using Address for *;
  using Zero for *; 
  
  RapidGrowthProtection.rapidGrowthProtection private m_rgp;
  PrivateEntrance.privateEntrance private m_privEnter;
  mapping(address => bool) private m_referrals;
  InvestorsStorage private m_investors;

  // automatically generates getters
  uint public constant minInvesment = 10 finney; //       0.01 eth
  uint public constant maxBalance = 333e5 ether; // 33 300 000 eth
  address public advertisingAddress;
  address public adminsAddress;
  uint public investmentsNumber;
  uint public waveStartup;

  // percents 
  Percent.percent private m_1_percent = Percent.percent(1, 100);           //   1/100  *100% = 1%
  Percent.percent private m_2_percent = Percent.percent(2, 100);           //   2/100  *100% = 2%
  Percent.percent private m_3_33_percent = Percent.percent(333, 10000);    // 333/10000*100% = 3.33%
  Percent.percent private m_adminsPercent = Percent.percent(5, 100);       //   5/100  *100% = 5%
  Percent.percent private m_advertisingPercent = Percent.percent(75, 1000);// 75/1000  *100% = 7.5%

  // more events for easy read from blockchain
  event LogPEInit(uint when, address rev1Storage, address rev2Storage, uint investorMaxInvestment, uint endTimestamp);
  event LogSendExcessOfEther(address indexed addr, uint when, uint value, uint investment, uint excess);
  event LogNewReferral(address indexed addr, address indexed referrerAddr, uint when, uint refBonus);
  event LogRGPInit(uint when, uint startTimestamp, uint maxDailyTotalInvestment, uint activityDays);
  event LogRGPInvestment(address indexed addr, uint when, uint investment, uint indexed day);
  event LogNewInvesment(address indexed addr, uint when, uint investment, uint value);
  event LogAutomaticReinvest(address indexed addr, uint when, uint investment);
  event LogPayDividends(address indexed addr, uint when, uint dividends);
  event LogNewInvestor(address indexed addr, uint when);
  event LogBalanceChanged(uint when, uint balance);
  event LogNextWave(uint when);
  event LogDisown(uint when);


  modifier balanceChanged {
    _;
    emit LogBalanceChanged(now, address(this).balance);
  }

  modifier notFromContract() {
    require(msg.sender.isNotContract(), "only externally accounts");
    _;
  }

  constructor() public {
    adminsAddress = msg.sender;
    advertisingAddress = msg.sender;
    nextWave();
  }

  function() public payable {
    // investor get him dividends
    if (msg.value.isZero()) {
      getMyDividends();
      return;
    }

    // sender do invest
    doInvest(msg.data.toAddress());
  }

  function doDisown() public onlyOwner {
    disown();
    emit LogDisown(now);
  }

  function init(address rev1StorageAddr, uint timestamp) public onlyOwner {
    // init Rapid Growth Protection
    m_rgp.startTimestamp = timestamp + 1;
    m_rgp.maxDailyTotalInvestment = 500 ether;
    m_rgp.activityDays = 21;
    emit LogRGPInit(
      now, 
      m_rgp.startTimestamp,
      m_rgp.maxDailyTotalInvestment,
      m_rgp.activityDays
    );


    // init Private Entrance
    m_privEnter.rev1Storage = Rev1Storage(rev1StorageAddr);
    m_privEnter.rev2Storage = Rev2Storage(address(m_investors));
    m_privEnter.investorMaxInvestment = 50 ether;
    m_privEnter.endTimestamp = timestamp;
    emit LogPEInit(
      now, 
      address(m_privEnter.rev1Storage), 
      address(m_privEnter.rev2Storage), 
      m_privEnter.investorMaxInvestment, 
      m_privEnter.endTimestamp
    );
  }

  function setAdvertisingAddress(address addr) public onlyOwner {
    addr.requireNotZero();
    advertisingAddress = addr;
  }

  function setAdminsAddress(address addr) public onlyOwner {
    addr.requireNotZero();
    adminsAddress = addr;
  }

  function privateEntranceProvideAccessFor(address[] addrs) public onlyOwner {
    m_privEnter.provideAccessFor(addrs);
  }

  function rapidGrowthProtectionmMaxInvestmentAtNow() public view returns(uint investment) {
    investment = m_rgp.maxInvestmentAtNow();
  }

  function investorsNumber() public view returns(uint) {
    return m_investors.size();
  }

  function balanceETH() public view returns(uint) {
    return address(this).balance;
  }

  function percent1() public view returns(uint numerator, uint denominator) {
    (numerator, denominator) = (m_1_percent.num, m_1_percent.den);
  }

  function percent2() public view returns(uint numerator, uint denominator) {
    (numerator, denominator) = (m_2_percent.num, m_2_percent.den);
  }

  function percent3_33() public view returns(uint numerator, uint denominator) {
    (numerator, denominator) = (m_3_33_percent.num, m_3_33_percent.den);
  }

  function advertisingPercent() public view returns(uint numerator, uint denominator) {
    (numerator, denominator) = (m_advertisingPercent.num, m_advertisingPercent.den);
  }

  function adminsPercent() public view returns(uint numerator, uint denominator) {
    (numerator, denominator) = (m_adminsPercent.num, m_adminsPercent.den);
  }

  function investorInfo(address investorAddr) public view returns(uint investment, uint paymentTime, bool isReferral) {
    (investment, paymentTime) = m_investors.investorInfo(investorAddr);
    isReferral = m_referrals[investorAddr];
  }

  function investorDividendsAtNow(address investorAddr) public view returns(uint dividends) {
    dividends = calcDividends(investorAddr);
  }

  function dailyPercentAtNow() public view returns(uint numerator, uint denominator) {
    Percent.percent memory p = dailyPercent();
    (numerator, denominator) = (p.num, p.den);
  }

  function refBonusPercentAtNow() public view returns(uint numerator, uint denominator) {
    Percent.percent memory p = refBonusPercent();
    (numerator, denominator) = (p.num, p.den);
  }

  function getMyDividends() public notFromContract balanceChanged {
    // calculate dividends
    uint dividends = calcDividends(msg.sender);
    require (dividends.notZero(), "cannot to pay zero dividends");

    // update investor payment timestamp
    assert(m_investors.setPaymentTime(msg.sender, now));

    // check enough eth - goto next wave if needed
    if (address(this).balance <= dividends) {
      nextWave();
      dividends = address(this).balance;
    } 

    // transfer dividends to investor
    msg.sender.transfer(dividends);
    emit LogPayDividends(msg.sender, now, dividends);
  }

  function doInvest(address referrerAddr) public payable notFromContract balanceChanged {
    uint investment = msg.value;
    uint receivedEther = msg.value;
    require(investment >= minInvesment, "investment must be >= minInvesment");
    require(address(this).balance <= maxBalance, "the contract eth balance limit");

    if (m_rgp.isActive()) { 
      // use Rapid Growth Protection if needed
      uint rpgMaxInvest = m_rgp.maxInvestmentAtNow();
      rpgMaxInvest.requireNotZero();
      investment = Math.min(investment, rpgMaxInvest);
      assert(m_rgp.saveInvestment(investment));
      emit LogRGPInvestment(msg.sender, now, investment, m_rgp.currDay());
      
    } else if (m_privEnter.isActive()) {
      // use Private Entrance if needed
      uint peMaxInvest = m_privEnter.maxInvestmentFor(msg.sender);
      peMaxInvest.requireNotZero();
      investment = Math.min(investment, peMaxInvest);
    }

    // send excess of ether if needed
    if (receivedEther > investment) {
      uint excess = receivedEther - investment;
      msg.sender.transfer(excess);
      receivedEther = investment;
      emit LogSendExcessOfEther(msg.sender, now, msg.value, investment, excess);
    }

    // commission
    advertisingAddress.send(m_advertisingPercent.mul(receivedEther));
    adminsAddress.send(m_adminsPercent.mul(receivedEther));

    bool senderIsInvestor = m_investors.isInvestor(msg.sender);

    // ref system works only once and only on first invest
    if (referrerAddr.notZero() && !senderIsInvestor && !m_referrals[msg.sender] &&
      referrerAddr != msg.sender && m_investors.isInvestor(referrerAddr)) {
      
      m_referrals[msg.sender] = true;
      // add referral bonus to investor`s and referral`s investments
      uint refBonus = refBonusPercent().mmul(investment);
      assert(m_investors.addInvestment(referrerAddr, refBonus)); // add referrer bonus
      investment += refBonus;                                    // add referral bonus
      emit LogNewReferral(msg.sender, referrerAddr, now, refBonus);
    }

    // automatic reinvest - prevent burning dividends
    uint dividends = calcDividends(msg.sender);
    if (senderIsInvestor && dividends.notZero()) {
      investment += dividends;
      emit LogAutomaticReinvest(msg.sender, now, dividends);
    }

    if (senderIsInvestor) {
      // update existing investor
      assert(m_investors.addInvestment(msg.sender, investment));
      assert(m_investors.setPaymentTime(msg.sender, now));
    } else {
      // create new investor
      assert(m_investors.newInvestor(msg.sender, investment, now));
      emit LogNewInvestor(msg.sender, now);
    }

    investmentsNumber++;
    emit LogNewInvesment(msg.sender, now, investment, receivedEther);
  }

  function getMemInvestor(address investorAddr) internal view returns(InvestorsStorage.Investor memory) {
    (uint investment, uint paymentTime) = m_investors.investorInfo(investorAddr);
    return InvestorsStorage.Investor(investment, paymentTime);
  }

  function calcDividends(address investorAddr) internal view returns(uint dividends) {
    InvestorsStorage.Investor memory investor = getMemInvestor(investorAddr);

    // safe gas if dividends will be 0
    if (investor.investment.isZero() || now.sub(investor.paymentTime) < 10 minutes) {
      return 0;
    }
    
    // for prevent burning daily dividends if 24h did not pass - calculate it per 10 min interval
    // if daily percent is X, then 10min percent = X / (24h / 10 min) = X / 144

    // and we must to get numbers of 10 min interval after investor got payment:
    // (now - investor.paymentTime) / 10min 

    // finaly calculate dividends = ((now - investor.paymentTime) / 10min) * (X * investor.investment)  / 144) 

    Percent.percent memory p = dailyPercent();
    dividends = (now.sub(investor.paymentTime) / 10 minutes) * p.mmul(investor.investment) / 144;
  }

  function dailyPercent() internal view returns(Percent.percent memory p) {
    uint balance = address(this).balance;

    // (3) 3.33% if balance < 1 000 ETH
    // (2) 2% if 1 000 ETH <= balance <= 33 333 ETH
    // (1) 1% if 33 333 ETH < balance

    if (balance < 1000 ether) { 
      p = m_3_33_percent.toMemory(); // (3)
    } else if ( 1000 ether <= balance && balance <= 33333 ether) {
      p = m_2_percent.toMemory();    // (2)
    } else {
      p = m_1_percent.toMemory();    // (1)
    }
  }

  function refBonusPercent() internal view returns(Percent.percent memory p) {
    uint balance = address(this).balance;

    // (1) 1% if 100 000 ETH < balance
    // (2) 2% if 10 000 ETH <= balance <= 100 000 ETH
    // (3) 3.33% if balance < 10 000 ETH   
    
    if (balance < 10000 ether) { 
      p = m_3_33_percent.toMemory(); // (3)
    } else if ( 10000 ether <= balance && balance <= 100000 ether) {
      p = m_2_percent.toMemory();    // (2)
    } else {
      p = m_1_percent.toMemory();    // (1)
    }          
  }

  function nextWave() private {
    m_investors = new InvestorsStorage();
    investmentsNumber = 0;
    waveStartup = now;
    m_rgp.startAt(now);
    emit LogRGPInit(now , m_rgp.startTimestamp, m_rgp.maxDailyTotalInvestment, m_rgp.activityDays);
    emit LogNextWave(now);
  }
}

Contract ABI

[{"constant":false,"inputs":[{"name":"addrs","type":"address[]"}],"name":"privateEntranceProvideAccessFor","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"percent2","outputs":[{"name":"numerator","type":"uint256"},{"name":"denominator","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"advertisingAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"refBonusPercentAtNow","outputs":[{"name":"numerator","type":"uint256"},{"name":"denominator","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"rev1StorageAddr","type":"address"},{"name":"timestamp","type":"uint256"}],"name":"init","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"minInvesment","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"adminsAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"investorsNumber","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"percent1","outputs":[{"name":"numerator","type":"uint256"},{"name":"denominator","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"maxBalance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"investorAddr","type":"address"}],"name":"investorDividendsAtNow","outputs":[{"name":"dividends","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"rapidGrowthProtectionmMaxInvestmentAtNow","outputs":[{"name":"investment","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"advertisingPercent","outputs":[{"name":"numerator","type":"uint256"},{"name":"denominator","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"adminsPercent","outputs":[{"name":"numerator","type":"uint256"},{"name":"denominator","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"}],"name":"setAdminsAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"investmentsNumber","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"percent3_33","outputs":[{"name":"numerator","type":"uint256"},{"name":"denominator","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"dailyPercentAtNow","outputs":[{"name":"numerator","type":"uint256"},{"name":"denominator","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"}],"name":"setAdvertisingAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"getMyDividends","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"referrerAddr","type":"address"}],"name":"doInvest","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"name":"investorAddr","type":"address"}],"name":"investorInfo","outputs":[{"name":"investment","type":"uint256"},{"name":"paymentTime","type":"uint256"},{"name":"isReferral","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"waveStartup","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"balanceETH","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"doDisown","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":false,"name":"when","type":"uint256"},{"indexed":false,"name":"rev1Storage","type":"address"},{"indexed":false,"name":"rev2Storage","type":"address"},{"indexed":false,"name":"investorMaxInvestment","type":"uint256"},{"indexed":false,"name":"endTimestamp","type":"uint256"}],"name":"LogPEInit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"addr","type":"address"},{"indexed":false,"name":"when","type":"uint256"},{"indexed":false,"name":"value","type":"uint256"},{"indexed":false,"name":"investment","type":"uint256"},{"indexed":false,"name":"excess","type":"uint256"}],"name":"LogSendExcessOfEther","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"addr","type":"address"},{"indexed":true,"name":"referrerAddr","type":"address"},{"indexed":false,"name":"when","type":"uint256"},{"indexed":false,"name":"refBonus","type":"uint256"}],"name":"LogNewReferral","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"when","type":"uint256"},{"indexed":false,"name":"startTimestamp","type":"uint256"},{"indexed":false,"name":"maxDailyTotalInvestment","type":"uint256"},{"indexed":false,"name":"activityDays","type":"uint256"}],"name":"LogRGPInit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"addr","type":"address"},{"indexed":false,"name":"when","type":"uint256"},{"indexed":false,"name":"investment","type":"uint256"},{"indexed":true,"name":"day","type":"uint256"}],"name":"LogRGPInvestment","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"addr","type":"address"},{"indexed":false,"name":"when","type":"uint256"},{"indexed":false,"name":"investment","type":"uint256"},{"indexed":false,"name":"value","type":"uint256"}],"name":"LogNewInvesment","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"addr","type":"address"},{"indexed":false,"name":"when","type":"uint256"},{"indexed":false,"name":"investment","type":"uint256"}],"name":"LogAutomaticReinvest","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"addr","type":"address"},{"indexed":false,"name":"when","type":"uint256"},{"indexed":false,"name":"dividends","type":"uint256"}],"name":"LogPayDividends","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"addr","type":"address"},{"indexed":false,"name":"when","type":"uint256"}],"name":"LogNewInvestor","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"when","type":"uint256"},{"indexed":false,"name":"balance","type":"uint256"}],"name":"LogBalanceChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"when","type":"uint256"}],"name":"LogNextWave","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"when","type":"uint256"}],"name":"LogDisown","type":"event"}]

Contract Creation Code

60016080819052606460a08190526010919091556011819055600260c081905260e0829052601255601381905561014d61010081905261271061012081905260149190915560155560056101408190526101608290526016556017556101c0604052604b6101808190526103e86101a08190526018919091556019553480156200008857600080fd5b506000805433600160a060020a03199182168117909255600d8054821683179055600c80549091169091179055620000c8640100000000620000ce810204565b6200022d565b620000d86200021c565b604051809103906000f080158015620000f5573d6000803e3d6000fd5b50600b8054600160a060020a031916600160a060020a03929092169190911790556000600e5542600f8190556200013d90600190640100000000620001c4810262001d391704565b6001546002546003546040805142815260208101949094528381019290925260ff166060830152517f16171a4e996b33ebb6320397242a4168f60c16e87fbd8b58f1744d68c4179caf9181900360800190a16040805142815290517fc66870ef5f6257a76295d443e9221488043ec691f830f6c6128755c3518e3c759181900360200190a1565b80825560015b600283015460ff90811690821611620002175760ff81166000908152600384016020526040902054156200020e5760ff811660009081526003840160205260408120555b600101620001ca565b505050565b60405161047480620024d283390190565b612295806200023d6000396000f3006080604052600436106101485763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166306127a1181146101a7578063074a1600146101fc5780631686531a1461022a578063341bae0e1461025b578063399ae724146102705780633d7ac9f81461029457806362d2c555146102bb578063653c3174146102d057806368f6e75f146102e557806373ad468a146102fa578063900334b11461030f57806390b0636f146103305780639396df321461034557806395a23c3a1461035a578063984d4a931461036f5780639ec6e05414610390578063b7c1a119146103a5578063b8fde2a4146103ba578063cb192f2c146103cf578063d50030ad146103f0578063d82fa3f114610405578063dbcbaca414610419578063eafecc7a1461045a578063ecbdbb321461046f578063fc7c41af14610484575b61015134610499565b156101635761015e6104a1565b6101a5565b6101a56101a06000368080601f016020809104026020016040519081016040528093929190818152602001838380828437506106c6945050505050565b6106cd565b005b3480156101b357600080fd5b50604080516020600480358082013583810280860185019096528085526101a595369593946024949385019291829185019084908082843750949750610fa79650505050505050565b34801561020857600080fd5b5061021161100b565b6040805192835260208301919091528051918290030190f35b34801561023657600080fd5b5061023f611015565b60408051600160a060020a039092168252519081900360200190f35b34801561026757600080fd5b50610211611024565b34801561027c57600080fd5b506101a5600160a060020a0360043516602435611049565b3480156102a057600080fd5b506102a96111ae565b60408051918252519081900360200190f35b3480156102c757600080fd5b5061023f6111b9565b3480156102dc57600080fd5b506102a96111c8565b3480156102f157600080fd5b50610211611258565b34801561030657600080fd5b506102a9611262565b34801561031b57600080fd5b506102a9600160a060020a0360043516611271565b34801561033c57600080fd5b506102a9611282565b34801561035157600080fd5b50610211611293565b34801561036657600080fd5b5061021161129d565b34801561037b57600080fd5b506101a5600160a060020a03600435166112a7565b34801561039c57600080fd5b506102a9611338565b3480156103b157600080fd5b5061021161133e565b3480156103c657600080fd5b50610211611348565b3480156103db57600080fd5b506101a5600160a060020a036004351661135b565b3480156103fc57600080fd5b506101a56104a1565b6101a5600160a060020a03600435166106cd565b34801561042557600080fd5b5061043a600160a060020a03600435166113ec565b604080519384526020840192909252151582820152519081900360600190f35b34801561046657600080fd5b506102a96114b2565b34801561047b57600080fd5b506102a96114b8565b34801561049057600080fd5b506101a56114bd565b80155b919050565b60006104ac3361154a565b1515610502576040805160e560020a62461bcd02815260206004820152601860248201527f6f6e6c792065787465726e616c6c79206163636f756e74730000000000000000604482015290519081900360640190fd5b61050b33611556565b90506105168161160a565b151561056c576040805160e560020a62461bcd02815260206004820152601c60248201527f63616e6e6f7420746f20706179207a65726f206469766964656e647300000000604482015290519081900360640190fd5b600b54604080517f440135850000000000000000000000000000000000000000000000000000000081523360048201524260248201529051600160a060020a03909216916344013585916044808201926020929091908290030181600087803b1580156105d857600080fd5b505af11580156105ec573d6000803e3d6000fd5b505050506040513d602081101561060257600080fd5b5051151561060c57fe5b303181106106205761061c61160f565b5030315b604051339082156108fc029083906000818181858888f1935050505015801561064d573d6000803e3d6000fd5b506040805142815260208101839052815133927f6710e0cad56444677ac916513b384a4acc6501cfb5219f59657ad4ddffef9d60928290030190a2604080514281523031602082015281517f32367fddaa1baa1c6a0fc5c3e8284df724bacc7b50e847c32c9f9765f9f96137929181900390910190a150565b6014015190565b6000808080808080806106df3361154a565b1515610735576040805160e560020a62461bcd02815260206004820152601860248201527f6f6e6c792065787465726e616c6c79206163636f756e74730000000000000000604482015290519081900360640190fd5b349750879650662386f26fc100008710156107c0576040805160e560020a62461bcd02815260206004820152602260248201527f696e766573746d656e74206d757374206265203e3d206d696e496e7665736d6560448201527f6e74000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b6a1b8b8c9e000e82a480000030311115610824576040805160e560020a62461bcd02815260206004820152601e60248201527f74686520636f6e7472616374206574682062616c616e6365206c696d69740000604482015290519081900360640190fd5b61082e60016116ff565b156108b65761083d600161172a565b9550610848866117a4565b61085288876117fb565b975061086560018963ffffffff61181316565b151561086d57fe5b6108776001611893565b60408051428152602081018b9052815133927f21cd51cc98547f9914bc0b314a40e645408acad21d1289eecb4dfb534fda7cfc928290030190a36108ee565b6108c060056118bd565b156108ee576108d660053363ffffffff6118c616565b94506108e1856117a4565b6108eb88866117fb565b97505b87871115610976576040518888039450339085156108fc029086906000818181858888f19350505050158015610928573d6000803e3d6000fd5b50604080514281523460208201528082018a905260608101869052905189985033917faac472d912a7451062b64c942775db41d65cce271603099e1c4760e072050951919081900360800190a25b600c54600160a060020a03166108fc61099660188a63ffffffff611a5b16565b6040518115909202916000818181858888f15050600d54600160a060020a031692506108fc91506109d0905060168a63ffffffff611a5b16565b6040518115909202916000818181858888f15050600b54604080517fcee2a9cf0000000000000000000000000000000000000000000000000000000081523360048201529051600160a060020a03909216945063cee2a9cf935060248082019350602092918290030181600087803b158015610a4b57600080fd5b505af1158015610a5f573d6000803e3d6000fd5b505050506040513d6020811015610a7557600080fd5b50519250610a8b600160a060020a038a16611a86565b8015610a95575082155b8015610ab15750336000908152600a602052604090205460ff16155b8015610ac65750600160a060020a0389163314155b8015610b625750600b54604080517fcee2a9cf000000000000000000000000000000000000000000000000000000008152600160a060020a038c811660048301529151919092169163cee2a9cf9160248083019260209291908290030181600087803b158015610b3557600080fd5b505af1158015610b49573d6000803e3d6000fd5b505050506040513d6020811015610b5f57600080fd5b50515b15610c8b57336000908152600a60205260409020805460ff19166001179055610b9988610b8d611a94565b9063ffffffff611b0516565b600b54604080517f20987e64000000000000000000000000000000000000000000000000000000008152600160a060020a038d811660048301526024820185905291519395509116916320987e64916044808201926020929091908290030181600087803b158015610c0a57600080fd5b505af1158015610c1e573d6000803e3d6000fd5b505050506040513d6020811015610c3457600080fd5b50511515610c3e57fe5b6040805142815260208101849052815199840199600160a060020a038c169233927fc04fb14bddd876003a335c37b1fe6524ac1dbf74eb64dd08cd085fba4b97d592929081900390910190a35b610c9433611556565b9050828015610ca75750610ca78161160a565b15610ceb57604080514281526020810183905281519983019933927f149822e3a65d38c9b6f40e835864c61ef5ca0866219afc2db638e3f85ae78866928290030190a25b8215610e3757600b54604080517f20987e64000000000000000000000000000000000000000000000000000000008152336004820152602481018b90529051600160a060020a03909216916320987e64916044808201926020929091908290030181600087803b158015610d5e57600080fd5b505af1158015610d72573d6000803e3d6000fd5b505050506040513d6020811015610d8857600080fd5b50511515610d9257fe5b600b54604080517f440135850000000000000000000000000000000000000000000000000000000081523360048201524260248201529051600160a060020a03909216916344013585916044808201926020929091908290030181600087803b158015610dfe57600080fd5b505af1158015610e12573d6000803e3d6000fd5b505050506040513d6020811015610e2857600080fd5b50511515610e3257fe5b610f15565b600b54604080517f41b2121c000000000000000000000000000000000000000000000000000000008152336004820152602481018b90524260448201529051600160a060020a03909216916341b2121c916064808201926020929091908290030181600087803b158015610eaa57600080fd5b505af1158015610ebe573d6000803e3d6000fd5b505050506040513d6020811015610ed457600080fd5b50511515610ede57fe5b60408051428152905133917fc8616cf56c542aa2540734215ee474180fc3b9cc7c2fad288000504632cacf18919081900360200190a25b600e8054600101905560408051428152602081018a9052808201899052905133917fd5a986028ae9e04f72859f7d3c1d8ae8b649c26be5b99d4c2d98ca4a19a0502e919081900360600190a2604080514281523031602082015281517f32367fddaa1baa1c6a0fc5c3e8284df724bacc7b50e847c32c9f9765f9f96137929181900390910190a1505050505050505050565b600054600160a060020a03163314610ff7576040805160e560020a62461bcd02815260206004820152600d602482015260008051602061224a833981519152604482015290519081900360640190fd5b61100860058263ffffffff611b2816565b50565b6012546013549091565b600c54600160a060020a031681565b60008061102f611dae565b611037611a94565b80516020909101519094909350915050565b600054600160a060020a03163314611099576040805160e560020a62461bcd02815260206004820152600d602482015260008051602061224a833981519152604482015290519081900360640190fd5b600180820190819055681b1ae4d6e2ef50000060028190556003805460ff1916601517908190556040805142815260208101949094528381019290925260ff166060830152517f16171a4e996b33ebb6320397242a4168f60c16e87fbd8b58f1744d68c4179caf9181900360800190a160058054600160a060020a0380851673ffffffffffffffffffffffffffffffffffffffff199283161792839055600b546006805490931690821617918290556802b5e3af16b1880000600781905560088590556040805142815294831660208601529290911683830152606083015260808201839052517f7e13d111fea1199cb6fb21cb38766240cfad970317820e8e5713da7a708285309181900360a00190a15050565b662386f26fc1000081565b600d54600160a060020a031681565b600b54604080517f949d225d0000000000000000000000000000000000000000000000000000000081529051600092600160a060020a03169163949d225d91600480830192602092919082900301818787803b15801561122757600080fd5b505af115801561123b573d6000803e3d6000fd5b505050506040513d602081101561125157600080fd5b5051905090565b6010546011549091565b6a1b8b8c9e000e82a480000081565b600061127c82611556565b92915050565b600061128e600161172a565b905090565b6018546019549091565b6016546017549091565b600054600160a060020a031633146112f7576040805160e560020a62461bcd02815260206004820152600d602482015260008051602061224a833981519152604482015290519081900360640190fd5b61130981600160a060020a0316611b91565b600d805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600e5481565b6014546015549091565b600080611353611dae565b611037611bf1565b600054600160a060020a031633146113ab576040805160e560020a62461bcd02815260206004820152600d602482015260008051602061224a833981519152604482015290519081900360640190fd5b6113bd81600160a060020a0316611b91565b600c805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600b54604080517fdbcbaca4000000000000000000000000000000000000000000000000000000008152600160a060020a038481166004830152825160009485948594939091169263dbcbaca4926024808301939282900301818787803b15801561145657600080fd5b505af115801561146a573d6000803e3d6000fd5b505050506040513d604081101561148057600080fd5b508051602091820151600160a060020a039096166000908152600a909252604090912054909560ff9091169350915050565b600f5481565b303190565b600054600160a060020a0316331461150d576040805160e560020a62461bcd02815260206004820152600d602482015260008051602061224a833981519152604482015290519081900360640190fd5b611515611c45565b6040805142815290517f5189687a7ec9d4aebe2f548f952ffbbad19e4cd545c4a05b5e2369cd272dd5519181900360200190a1565b803b8015905b50919050565b6000611560611dae565b611568611dae565b61157184611c64565b91506115808260000151610499565b806115a257506102586115a0836020015142611d2290919063ffffffff16565b105b156115b05760009250611603565b6115b8611bf1565b82519091506090906115d190839063ffffffff611b0516565b6102586115eb856020015142611d2290919063ffffffff16565b8115156115f457fe5b04028115156115ff57fe5b0492505b5050919050565b151590565b611617611dc5565b604051809103906000f080158015611633573d6000803e3d6000fd5b50600b805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03929092169190911790556000600e5542600f81905561167890600190611d39565b6001546002546003546040805142815260208101949094528381019290925260ff166060830152517f16171a4e996b33ebb6320397242a4168f60c16e87fbd8b58f1744d68c4179caf9181900360800190a16040805142815290517fc66870ef5f6257a76295d443e9221488043ec691f830f6c6128755c3518e3c759181900360200190a1565b60008061170b83611893565b905080158015906117235750600283015460ff168111155b9392505050565b60008061173683611893565b905080158061174b5750600283015460ff1681115b156117595760009150611550565b600183015460ff82166000908152600385016020526040902054106117815760009150611550565b60ff81166000908152600384016020526040902054600184015403915050919050565b801515611008576040805160e560020a62461bcd02815260206004820152601660248201527f72657175697265206e6f74207a65726f2076616c756500000000000000000000604482015290519081900360640190fd5b60008183111561180c57508061127c565b5090919050565b60008061181f84611893565b90508015806118345750600284015460ff1681115b15611842576000915061188c565b600184015460ff821660009081526003860160205260409020548401111561186d576000915061188c565b60ff811660009081526003850160205260409020805484019055600191505b5092915050565b600042826000015411156118a95750600061049c565b815462015180904203046001019050919050565b60030154421090565b600160a060020a03811660009081526004830160205260408120548190819060ff1615156118f75760009250611a53565b8454604080517f993d3489000000000000000000000000000000000000000000000000000000008152600160a060020a038781166004830152825193169263993d3489926024808401939192918290030181600087803b15801561195a57600080fd5b505af115801561196e573d6000803e3d6000fd5b505050506040513d604081101561198457600080fd5b505191508115156119985760009250611a53565b6119a68286600201546117fb565b6001860154604080517fdbcbaca4000000000000000000000000000000000000000000000000000000008152600160a060020a03888116600483015282519496509092169263dbcbaca49260248082019392918290030181600087803b158015611a0f57600080fd5b505af1158015611a23573d6000803e3d6000fd5b505050506040513d6040811015611a3957600080fd5b50519050818110611a4d5760009250611a53565b80820392505b505092915050565b6000811515611a6c5750600061127c565b600183015483548302811515611a7e57fe5b049392505050565b600160a060020a0316151590565b611a9c611dae565b303169021e19e0c9bab2400000811015611ac157611aba6014611d89565b9150611b01565b8069021e19e0c9bab240000011158015611ae5575069152d02c7e14af68000008111155b15611af457611aba6012611d89565b611afe6010611d89565b91505b5090565b6000811515611b165750600061127c565b602083015183518302811515611a7e57fe5b60005b81518161ffff161015611b8c576001836004016000848461ffff16815181101515611b5257fe5b602090810291909101810151600160a060020a03168252810191909152604001600020805460ff1916911515919091179055600101611b2b565b505050565b600160a060020a0381161515611008576040805160e560020a62461bcd02815260206004820152601860248201527f72657175697265206e6f74207a65726f20616464726573730000000000000000604482015290519081900360640190fd5b611bf9611dae565b3031683635c9adc5dea00000811015611c1657611aba6014611d89565b80683635c9adc5dea0000011158015611ae5575069070efc4d0e326fb400008111611af457611aba6012611d89565b6000805473ffffffffffffffffffffffffffffffffffffffff19169055565b611c6c611dae565b600b54604080517fdbcbaca4000000000000000000000000000000000000000000000000000000008152600160a060020a0385811660048301528251600094859492169263dbcbaca492602480830193919282900301818787803b158015611cd357600080fd5b505af1158015611ce7573d6000803e3d6000fd5b505050506040513d6040811015611cfd57600080fd5b5080516020918201516040805180820190915291825291810191909152949350505050565b60008083831115611d3257600080fd5b5050900390565b80825560015b600283015460ff90811690821611611b8c5760ff8116600090815260038401602052604090205415611d815760ff811660009081526003840160205260408120555b600101611d3f565b611d91611dae565b506040805180820190915281548152600190910154602082015290565b604080518082019091526000808252602082015290565b60405161047480611dd6833901905600608060405260008054600160a060020a0319163317905561044f806100256000396000f3006080604052600436106100775763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166320987e64811461007c57806341b2121c146100b457806344013585146100db578063949d225d146100ff578063cee2a9cf14610126578063dbcbaca414610147575b600080fd5b34801561008857600080fd5b506100a0600160a060020a0360043516602435610181565b604080519115158252519081900360200190f35b3480156100c057600080fd5b506100a0600160a060020a036004351660243560443561024a565b3480156100e757600080fd5b506100a0600160a060020a0360043516602435610316565b34801561010b57600080fd5b506101146103de565b60408051918252519081900360200190f35b34801561013257600080fd5b506100a0600160a060020a03600435166103e4565b34801561015357600080fd5b50610168600160a060020a0360043516610400565b6040805192835260208301919091528051918290030190f35b60008054600160a060020a031633146101fb57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f6163636573732064656e69656400000000000000000000000000000000000000604482015290519081900360640190fd5b600160a060020a038316600090815260026020526040902054151561022257506000610244565b50600160a060020a038216600090815260026020526040902080548201905560015b92915050565b600080548190600160a060020a031633146102c657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f6163636573732064656e69656400000000000000000000000000000000000000604482015290519081900360640190fd5b50600160a060020a038416600090815260026020526040902080541515806102ec575083155b156102fa576000915061030e565b838155600180820184905580548101815591505b509392505050565b60008054600160a060020a0316331461039057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f6163636573732064656e69656400000000000000000000000000000000000000604482015290519081900360640190fd5b600160a060020a03831660009081526002602052604090205415156103b757506000610244565b50600160a060020a0382166000908152600260205260409020600190810182905592915050565b60015481565b600160a060020a03166000908152600260205260408120541190565b600160a060020a03166000908152600260205260409020805460019091015490915600a165627a7a723058206b0c9e67bd5a5971ca788f8b14c9e3c6e8703d405b71c82597482e605ceb217500296163636573732064656e69656400000000000000000000000000000000000000a165627a7a72305820bc3b957c469f1df1b8dad362cb714a7444761a7dc4b430a4c6ca7924ab6eea3a0029608060405260008054600160a060020a0319163317905561044f806100256000396000f3006080604052600436106100775763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166320987e64811461007c57806341b2121c146100b457806344013585146100db578063949d225d146100ff578063cee2a9cf14610126578063dbcbaca414610147575b600080fd5b34801561008857600080fd5b506100a0600160a060020a0360043516602435610181565b604080519115158252519081900360200190f35b3480156100c057600080fd5b506100a0600160a060020a036004351660243560443561024a565b3480156100e757600080fd5b506100a0600160a060020a0360043516602435610316565b34801561010b57600080fd5b506101146103de565b60408051918252519081900360200190f35b34801561013257600080fd5b506100a0600160a060020a03600435166103e4565b34801561015357600080fd5b50610168600160a060020a0360043516610400565b6040805192835260208301919091528051918290030190f35b60008054600160a060020a031633146101fb57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f6163636573732064656e69656400000000000000000000000000000000000000604482015290519081900360640190fd5b600160a060020a038316600090815260026020526040902054151561022257506000610244565b50600160a060020a038216600090815260026020526040902080548201905560015b92915050565b600080548190600160a060020a031633146102c657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f6163636573732064656e69656400000000000000000000000000000000000000604482015290519081900360640190fd5b50600160a060020a038416600090815260026020526040902080541515806102ec575083155b156102fa576000915061030e565b838155600180820184905580548101815591505b509392505050565b60008054600160a060020a0316331461039057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f6163636573732064656e69656400000000000000000000000000000000000000604482015290519081900360640190fd5b600160a060020a03831660009081526002602052604090205415156103b757506000610244565b50600160a060020a0382166000908152600260205260409020600190810182905592915050565b60015481565b600160a060020a03166000908152600260205260408120541190565b600160a060020a03166000908152600260205260409020805460019091015490915600a165627a7a723058206b0c9e67bd5a5971ca788f8b14c9e3c6e8703d405b71c82597482e605ceb21750029

Swarm Source

bzzr://6b0c9e67bd5a5971ca788f8b14c9e3c6e8703d405b71c82597482e605ceb2175
Block Age Transaction Difficulty GasUsed Reward
Block Age Uncle Number Difficulty GasUsed Reward
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.