Реклама вашего контракта Кабинет инвестора
Меню
Появились вопросы или есть предложения?
Напишите нам в Telegram t.me/smartradar
ETHRV - ETH REVOLUTION!

ETHRV - ETH REVOLUTION!

Etherscan
0xCC70db1aC810677c06D9CC1CDD8c953B12eDD3FA
Следить за контрактом

Баланс

520.608 ETH.

Динамика пополнений
от общего пополнения за день

51.575%

Ввод

За последний час
0 ETH.
Всего
736.173 ETH.

Выводы

За последний час
0 ETH.
Всего
215.565 ETH.

Условия

В день
-
В час
-

Инвесторов

302

Повторные пополнения

За последний час
0 ETH.
Всего
87.2327 ETH.

Средняя оценка аудиторов

8

Контакты

  • Таймлайн:
  • час
  • день
  • неделя
  • месяц
Пополнения (1165)
Выводы (1800)
Аудит
Код
API
Комменторы
Дата Блок TxHash От кого Кому Сумма
6 фев. 19:03 7183867 0x7b770fae493f867cb7ebec935c2ed0f853654334dba70c5def95f078ae300267 0xd0f7eb70b6894649b6f0e889978fe1ef319ba187 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0 Ether
6 фев. 15:59 7183289 0x80488aa28d7654fdbd4472dd180e9e8c464620e0c37ed16ca7dad39f859c5303 0x2fca93811f6fd46a1b104700ea7638c2a2ff3c33 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0 Ether
6 фев. 14:01 7182866 0xce86ce6e516200d7f97359bb607d9c26b9029ab9420ee24f0302f60f25ac72c4 0xbf4e10fb6d08fa8669bd33723cf38e2efcf0341b 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0 Ether
6 фев. 12:41 7182590 0x3fba4e6d7f63793931471bc20645cc2f21055ae9553f13bf6b158800f012d5eb 0x70dbf64f87ba272306aa935f5f44980ad57885d4 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0.361 Ether
6 фев. 12:41 7182586 0xf9645a18b96c806b7457829f17dd781e40fe2ce459de1bf9f5c4cdb391f3b199 0x70dbf64f87ba272306aa935f5f44980ad57885d4 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0 Ether
5 фев. 17:03 7178600 0x3709384fb315bcd0a403a0962299ea73b05eccee6fa7e5baa1d93679aa7cece6 0x61ec2d441fdb4502367b379bf4bca17f60664f71 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0.0088888 Ether
5 фев. 16:51 7178552 0x23883bcf1f379ff85e1ee6f16cc18b5efcae2fa144b62bab76b76ee5993a2569 0x671b1aaf2e610901e0e95e4e862c5202fdbbe339 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0 Ether
5 фев. 12:39 7177703 0xd37b76f701b730767cf7b7dad900cbd983244e686e0774830893dc8f271c3873 0x70dbf64f87ba272306aa935f5f44980ad57885d4 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0.3573 Ether
5 фев. 12:38 7177698 0x24c5b838c4ccf483abcc0862a35580aef79a26183f6f6670740bc81a4511a062 0x70dbf64f87ba272306aa935f5f44980ad57885d4 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0 Ether
5 фев. 12:12 7177596 0x0b3f73d7340b40c7b0c82eacb3a0a720bad2ca52dadc6aee81527d3a3e3e98ed 0xf61487cee0224dab1e99cb7855270c3cf228b14c 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0 Ether
5 фев. 12:11 7177593 0x7b38f043cb2322408ef015c1674ca201651c53514c25d0d1aee8efeb479cb7f5 0x2de51e4bd9b5a43591c51cf8bb936708cc77047f 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0 Ether
5 фев. 07:25 7176619 0xc55ef0563b38dc716cc527bf8520d147955b14e0a1a3e2c855671e490e04e027 0xf4396e95230f14f745a8d19a69c0083a53036e84 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0.227 Ether
5 фев. 07:23 7176614 0x74a93918a942997a7ce3b5b7f59a037b9e926caed62b03188caa11b19c2af159 0xf4396e95230f14f745a8d19a69c0083a53036e84 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0 Ether
5 фев. 03:54 7175905 0xe0efe8986b8837ae595ba505b2ac309f9bcb21b682f82a4372cfad8c6e07ab3c 0xe4a102017c2de3f9fe4f9d54193537785f060b60 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0 Ether
4 фев. 21:11 7174530 0x587b02daf5669715ed862563468ea9041eb6947f1bad80001e26500eb6c751a8 0xbf4e10fb6d08fa8669bd33723cf38e2efcf0341b 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0 Ether
4 фев. 12:33 7172735 0x119c361d3affa124ae7721d7e874b3d9a0232c7501feaf7afbe95dfc49ca5d97 0x70dbf64f87ba272306aa935f5f44980ad57885d4 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0.3536 Ether
4 фев. 12:30 7172726 0x4549c18b0ee4ad83f87ee385ef80eff64b015d18b428a8c78eaa066e51ee0984 0x70dbf64f87ba272306aa935f5f44980ad57885d4 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0 Ether
4 фев. 09:49 7172161 0x3452ac59723f0028f7cea28b3281e71c8e1f16e249d8083fe0a7e925993f0fc7 0xcb3df454dfef9d88117b52a572efa3a538d2f7dd 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0 Ether
4 фев. 07:22 7171644 0xd95130d349d5991521999c6f6f14b5f8eff5d79c8ee96d4377f05c9535654a93 0xf4396e95230f14f745a8d19a69c0083a53036e84 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0.228 Ether
4 фев. 07:19 7171632 0x5a61912b2fceaa337abbd8cbdcf406b37ddad68828d05569bc616906f0dc7dfd 0xf4396e95230f14f745a8d19a69c0083a53036e84 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0 Ether
4 фев. 07:18 7171628 0x4df88cf74aa970d37b33e33c6f39fd10762fdbe6dbe8cc1b0089fbde0bbfd21e
Транзакция с ошибкой
0xf4396e95230f14f745a8d19a69c0083a53036e84 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0 Ether
4 фев. 07:16 7171624 0x4a194523d1a747760a9ede65a625593740d166ebff4c866111ec0fa399200664
Транзакция с ошибкой
0xf4396e95230f14f745a8d19a69c0083a53036e84 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0 Ether
3 фев. 22:27 7169786 0xe82b703ba0b18ac6744d8fd7dd8d9085cb1bc0a740e59b3b76a2b44f5c0083b9 0xc66dabb4fc7a14f716d09afd349fdb5cc110d1af 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0 Ether
3 фев. 20:36 7169436 0x83eca1994e8bd559dad4611375bec33dfaf8d740c34ab8763b537c42bb44d9e2 0xd1059e84e36bbc398c934fb59759caa00d5c4033 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0 Ether
3 фев. 17:17 7168778 0x12a8941aac02a438c316778ab6680e55dbbb4f0d974a220eeb5c287b869c4dcf 0x671b1aaf2e610901e0e95e4e862c5202fdbbe339 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0 Ether
Дата Блок parentTxHash От кого Кому Сумма
Сегодня 12:08 7248227 0x3ddc4609dc5f29312f32cb856b7b67f881192e5d04976afc534bda6ecbd2236f 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0xd1d8184569f6ba80507180b80fb743d37feb7cf8 0.0015 Ether
Сегодня 11:12 7248061 0x2338dfacfee3cc243364f798144f8e37de98cdb53c6fa129bd1b1fd22aadd8db 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0xe225b515f9e7ce922f18f99098f594969548e9b8 0.01869 Ether
Сегодня 11:12 7248061 0x2338dfacfee3cc243364f798144f8e37de98cdb53c6fa129bd1b1fd22aadd8db 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0x6c9033c1cd5b9129fd7d1b49947afca645c26153 0.004005 Ether
Сегодня 11:12 7248061 0x2338dfacfee3cc243364f798144f8e37de98cdb53c6fa129bd1b1fd22aadd8db 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0xd9cd3bde6a31e2a46d6f8c6669bbc470ae338e36 0.004005 Ether
Сегодня 11:10 7248056 0x8713cbdbd777953893b266884bb1ea69ec88698bc721722c78930b4d667d4e03 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0xf4396e95230f14f745a8d19a69c0083a53036e84 0.268716 Ether
Сегодня 00:48 7246195 0x8905dcf7259c3bd0f962895cd29b2f150c2fc4e5acdf1849a227fa9498c55092 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0x7d7630b5f614a2eef47346057b7bf2de70fd990a 0.0396 Ether
Вчера 18:59 7245153 0x6c9f5d427627ebb10a5e79c73dce5824a8165936ed8ad92f03eed733d80fa0b0 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0x671b1aaf2e610901e0e95e4e862c5202fdbbe339 0.03996715923936451 Ether
Вчера 15:48 7244627 0x31d7845aa61039a80fe2e07c5854db53478819471efd38d27dfcae4ac46e15ea 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0x2fca93811f6fd46a1b104700ea7638c2a2ff3c33 0.00345 Ether
Вчера 15:45 7244612 0x15595cc58925e7b6d43a89a3ee45cad42a9d72cd21d06b05ab6857bc7ea75feb 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0x2de51e4bd9b5a43591c51cf8bb936708cc77047f 0.02 Ether
Вчера 15:43 7244606 0x6b68c58d054fcedf7f8161cac0aea530e0f0f9c3ef6123a5654b4e0c02f83fbf 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0xf61487cee0224dab1e99cb7855270c3cf228b14c 0.01 Ether
Вчера 15:12 7244514 0x71461a8e1590dffc8816d937f1f7c3d02edf2da7fcbf668ddcf03048a085e160 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0xe225b515f9e7ce922f18f99098f594969548e9b8 0.029253 Ether
Вчера 15:12 7244514 0x71461a8e1590dffc8816d937f1f7c3d02edf2da7fcbf668ddcf03048a085e160 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0x6c9033c1cd5b9129fd7d1b49947afca645c26153 0.0062685 Ether
Вчера 15:12 7244514 0x71461a8e1590dffc8816d937f1f7c3d02edf2da7fcbf668ddcf03048a085e160 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0xd9cd3bde6a31e2a46d6f8c6669bbc470ae338e36 0.0062685 Ether
Вчера 15:11 7244507 0x9ce7b186c55dfd9d0af59435f58558f684dcb7029302bc1ee0c900999524e64d 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0x70dbf64f87ba272306aa935f5f44980ad57885d4 0.417943575 Ether
Вчера 12:03 7243971 0xab064f3e8fc054b16955758ed7cd24f44cda9cba0aa54fb3e51f4e8d213780b3 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0xa89f535e47ff7f2eeaffc28af3d35370f09c5b2f 0.40029 Ether
Вчера 11:19 7243848 0x08998fe827dbd62e00196825e662e93f64be223012278f78eac2be9d66c53625 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0xd1d8184569f6ba80507180b80fb743d37feb7cf8 0.0015 Ether
Вчера 10:36 7243710 0x9b596847979dbaddfc40df70fd58813eb2afc2fd37e055e6ef835993d1c13187 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0xe225b515f9e7ce922f18f99098f594969548e9b8 0.01855 Ether
Вчера 10:36 7243710 0x9b596847979dbaddfc40df70fd58813eb2afc2fd37e055e6ef835993d1c13187 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0x6c9033c1cd5b9129fd7d1b49947afca645c26153 0.003975 Ether
Вчера 10:36 7243710 0x9b596847979dbaddfc40df70fd58813eb2afc2fd37e055e6ef835993d1c13187 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0xd9cd3bde6a31e2a46d6f8c6669bbc470ae338e36 0.003975 Ether
Вчера 10:34 7243705 0xc581e18b03286fcb2e8c5577d1ba227e4b8788197f1c774272cd0ae9c7e37332 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0xf4396e95230f14f745a8d19a69c0083a53036e84 0.2659335 Ether
19 фев. 22:05 7241491 0x9aafe7e9e41a3dbc93143d7642800da7c3d6796a57b5347fd6143297b244a81c 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0xc66dabb4fc7a14f716d09afd349fdb5cc110d1af 0.02895 Ether
19 фев. 22:02 7241482 0x56a618b3ed0cb8d655b42424cf667a8ac4984385827c1b7f7acace19b52383a6 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0x1f50ac229b4fc9ab226b8d1f151e1c3dfda08866 0.12 Ether
19 фев. 19:17 7241009 0xbbc44bac4808e53fbc606bfff71914162691da6becdf200307ad657b4267db66 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0x11768565f3de7edb6034ba69663080aeb48a9274 0.651 Ether
19 фев. 19:05 7240977 0x044de72ba87e6ab434ca2ecdd560bc1e1c1bc2c53a5259beef3881add03e2ea7 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0x5923acdb724203c6f08bc63a9e270aae3842df10 0.42 Ether
19 фев. 15:09 7240273 0x33b016d09276c3e8cea169c0c703f287280b5caf9503e46424fae47f62ba653e 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0xe225b515f9e7ce922f18f99098f594969548e9b8 0.028952 Ether
Средняя оценка аудиторов 8
Contract Source Code </>
pragma solidity 0.4.25;


contract EthRV {
  using SafeMath for uint;

  struct Investor {
    uint deposit;
    uint paymentTime;
    uint withdrawal;
    uint boostStartup;
    bool isParticipant;
  }

  mapping (address => Investor) public investors;
  address public admin1Address;
  address public admin2Address;
  address public admin3Address;
  address public owner;
  uint public investmentsNumber;
  uint public investorsNumber;

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

  event OnRefLink(address indexed referral, uint referrarBonus, address indexed referrer,  uint referrerBonus, uint time);
  event OnNewInvestor(address indexed addr, uint time);
  event OnInvesment(address indexed addr, uint deposit, uint time);
  event OnBoostChanged(address indexed addr, bool isActive, uint time);
  event OnEarlyWithdrawal(address indexed addr, uint withdrawal, uint time);
  event OnDeleteInvestor(address indexed addr, uint time);
  event OnWithdraw(address indexed addr, uint withdrawal, uint time);
  event OnBoostBonus(address indexed addr, uint bonus, uint time);
  event OnNotEnoughBalance(uint time);

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

  function() external payable {
    if (msg.value == 0) {
      withdraw();
    } else if (msg.value == 0.0077777 ether) {
      boost();
    } else if (msg.value == 0.0088888 ether) {
      earlyWithdrawal();
    } else {
      deposit(bytes2address(msg.data));
    }
  }

  function disown() public onlyOwner {
    owner = address(0x0);
  }

  function setAdminsAddress(uint n, address addr) public onlyOwner {
    require(n >= 1 && n <= 3, "invalid number of admin`s address");
    if (n == 1) {
      admin1Address = addr;
    } else if (n == 2) {
      admin2Address = addr;
    } else {
      admin3Address = addr;
    }
  }

  function investorDividends(address investorAddr) public view returns(uint dividends, uint boostBonus) {
    return getDividends(investorAddr);
  }

  function withdraw() public {
    address investorAddr = msg.sender;
    (uint dividends, uint boostBonus) = getDividends(investorAddr);
    require(dividends > 0, "cannot to pay zero dividends");
    require(address(this).balance > 0, "fund is empty");
    uint withdrawal = dividends + boostBonus;

    // fund limit
    if (address(this).balance <= withdrawal) {
      emit OnNotEnoughBalance(now);
      withdrawal = address(this).balance;
    }

    Investor storage investor = investors[investorAddr];
    uint withdrawalLimit = investor.deposit * 200 / 100; // 200%
    uint totalWithdrawal = withdrawal + investor.withdrawal;

    // withdrawal limit - 200%
    if (totalWithdrawal >= withdrawalLimit) {
      withdrawal = withdrawalLimit.sub(investor.withdrawal);
      if (boostBonus > 0 ) {
        emit OnBoostBonus(investorAddr, boostBonus, now);
      }
      deleteInvestor(investorAddr);
    } else {
      // normal withdraw - dont use boostBonus
      if (withdrawal > dividends) {
        withdrawal = dividends;
      }
      investor.withdrawal += withdrawal;
      investor.paymentTime = now;
      if (investor.boostStartup > 0) {
        investor.boostStartup = 0;
        emit OnBoostChanged(investorAddr, false, now);
      }
    }

    investorAddr.transfer(withdrawal);
    emit OnWithdraw(investorAddr, withdrawal, now);
  }

  function earlyWithdrawal() public {
    address investorAddr = msg.sender;
    Investor storage investor = investors[investorAddr];
    require(investor.deposit > 0, "sender must be an investor");

    uint earlyWithdrawalLimit = investor.deposit * 70 / 100; // 70%
    require(earlyWithdrawalLimit > investor.withdrawal, "early withdraw only before 70% deposit`s withdrawal");

    uint withdrawal = earlyWithdrawalLimit.sub(investor.withdrawal); 
    investorAddr.transfer(withdrawal);
    emit OnEarlyWithdrawal(investorAddr, withdrawal, now);

    deleteInvestor(investorAddr);
  }

  function boost() public {
    Investor storage investor = investors[msg.sender];
    require(investor.deposit > 0, "sender must be an investor");
    require(investor.boostStartup == 0, "boost is already activated");
    investor.boostStartup = now;
    emit OnBoostChanged(msg.sender, true, now);
  }

  function deposit(address referrerAddr) public payable {
    uint depositAmount = msg.value;
    address investorAddr = msg.sender;
    require(isNotContract(investorAddr), "invest from contracts is not supported");
    require(depositAmount > 0, "deposit amount cannot be zero");

    admin1Address.send(depositAmount * 70 / 1000); //   7%
    admin2Address.send(depositAmount * 15 / 1000); // 1.5%
    admin3Address.send(depositAmount * 15 / 1000); // 1.5%

    Investor storage investor = investors[investorAddr];
    bool senderIsNotPaticipant = !investor.isParticipant;
    bool referrerIsParticipant = investors[referrerAddr].isParticipant;

    // ref link
    if (senderIsNotPaticipant && referrerIsParticipant && referrerAddr != investorAddr) {
      uint referrerBonus = depositAmount * 3 / 100; // 3%
      uint referralBonus = depositAmount * 1 / 100; // 1%
      referrerAddr.transfer(referrerBonus);
      investorAddr.transfer(referralBonus);
      emit OnRefLink(investorAddr, referralBonus, referrerAddr, referrerBonus, now);
    }

    if (investor.deposit == 0) {
      investorsNumber++;
      investor.isParticipant = true;
      emit OnNewInvestor(investorAddr, now);
    }

    investor.deposit += depositAmount;
    investor.paymentTime = now;

    investmentsNumber++;
    emit OnInvesment(investorAddr, depositAmount, now);
  }

  function getDividends(address investorAddr) internal view returns(uint dividends, uint boostBonus) {
    Investor storage investor = investors[investorAddr];
    if (investor.deposit == 0) {
      return (0, 0);
    }

    if (investor.boostStartup > 0) {
      uint boostDays = now.sub(investor.boostStartup).div(24 hours);
      boostBonus = boostDays * investor.deposit * 5 / 100000; // 0.005%
    }

    uint depositDays = now.sub(investor.paymentTime).div(24 hours);
    dividends = depositDays * investor.deposit * 1 / 100; // 1%

    uint depositAmountBonus;
    if (10 ether <= investor.deposit && investor.deposit <= 50 ether) {
      depositAmountBonus = depositDays * investor.deposit * 5 / 10000; // 0.05%
    } else if (50 ether < investor.deposit) {
      depositAmountBonus = depositDays * investor.deposit * 11 / 10000; // 0.11%
    }

    dividends += depositAmountBonus;
  }

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

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

  function deleteInvestor(address investorAddr) private {
    delete investors[investorAddr].deposit;
    delete investors[investorAddr].paymentTime;
    delete investors[investorAddr].withdrawal;
    delete investors[investorAddr].boostStartup;
    emit OnDeleteInvestor(investorAddr, now);
    investorsNumber--;
  }
}

/**
 * @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;
  }
}
Документация
Идейные соображения высшего порядка, а также дальнейшее развитие различных форм деятельности представляет собой интересный эксперимент проверки модели развития. Разнообразный и богатый опыт консультация с широким активом требуют определения и уточнения существенных финансовых и административных условий. Задача организации, в особенности же новая модель организационной деятельности требуют от нас анализа системы обучения кадров, соответствует насущным потребностям. Повседневная практика показывает, что дальнейшее развитие различных форм деятельности обеспечивает широкому кругу (специалистов) участие в формировании новых предложений. Разнообразный и богатый опыт дальнейшее развитие различных форм деятельности влечет за собой процесс внедрения и модернизации новых предложений.

Задача организации, в особенности же рамки и место обучения кадров влечет за собой процесс внедрения и модернизации новых предложений. Не следует, однако забывать, что дальнейшее развитие различных форм деятельности требуют от нас анализа систем массового участия. Значимость этих проблем настолько очевидна, что новая модель организационной деятельности влечет за собой процесс внедрения и модернизации модели развития. Повседневная практика показывает, что постоянное информационно-пропагандистское обеспечение нашей деятельности в значительной степени обуславливает создание существенных финансовых и административных условий.

Разнообразный и богатый опыт дальнейшее развитие различных форм деятельности требуют определения и уточнения соответствующий условий активизации. Разнообразный и богатый опыт консультация с широким активом позволяет выполнять важные задания по разработке существенных финансовых и административных условий. С другой стороны консультация с широким активом позволяет оценить значение системы обучения кадров, соответствует насущным потребностям. Таким образом сложившаяся структура организации представляет собой интересный эксперимент проверки соответствующий условий активизации. Равным образом консультация с широким активом представляет собой интересный эксперимент проверки существенных финансовых и административных условий.

Товарищи! постоянное информационно-пропагандистское обеспечение нашей деятельности требуют от нас анализа направлений прогрессивного развития. С другой стороны начало повседневной работы по формированию позиции позволяет оценить значение новых предложений.

Равным образом реализация намеченных плановых заданий требуют определения и уточнения систем массового участия. Разнообразный и богатый опыт постоянное информационно-пропагандистское обеспечение нашей деятельности требуют от нас анализа направлений прогрессивного развития. Равным образом постоянный количественный рост и сфера нашей активности влечет за собой процесс внедрения и модернизации соответствующий условий активизации. Повседневная практика показывает, что дальнейшее развитие различных форм деятельности влечет за собой процесс внедрения и модернизации модели развития.

Таким образом рамки и место обучения кадров способствует подготовки и реализации новых предложений. Равным образом укрепление и развитие структуры в значительной степени обуславливает создание существенных финансовых и административных условий. Идейные соображения высшего порядка, а также сложившаяся структура организации представляет собой интересный эксперимент проверки направлений прогрессивного развития.

Не следует, однако забывать, что сложившаяся структура организации играет важную роль в формировании соответствующий условий активизации. С другой стороны дальнейшее развитие различных форм деятельности требуют определения и уточнения направлений прогрессивного развития.

Повседневная практика показывает, что начало повседневной работы по формированию позиции представляет собой интересный эксперимент проверки систем массового участия. Идейные соображения высшего порядка, а также постоянный количественный рост и сфера нашей активности в значительной степени обуславливает создание систем массового участия.

Таким образом укрепление и развитие структуры представляет собой интересный эксперимент проверки существенных финансовых и административных условий. Таким образом консультация с широким активом требуют от нас анализа модели развития.

Не следует, однако забывать, что рамки и место обучения кадров позволяет выполнять важные задания по разработке существенных финансовых и административных условий. С другой стороны постоянное информационно-пропагандистское обеспечение нашей деятельности позволяет выполнять важные задания по разработке соответствующий условий активизации. Товарищи! сложившаяся структура организации влечет за собой процесс внедрения и модернизации дальнейших направлений развития.
Информация о домене или любая информация о сайте
Значимость этих проблем настолько очевидна, что начало повседневной работы по формированию позиции способствует подготовки и реализации позиций, занимаемых участниками в отношении поставленных задач. Товарищи! новая модель организационной деятельности позволяет оценить значение направлений прогрессивного развития. Равным образом дальнейшее развитие различных форм деятельности влечет за собой процесс внедрения и модернизации направлений прогрессивного развития. Равным образом реализация намеченных плановых заданий позволяет выполнять важные задания по разработке новых предложений. Задача организации, в особенности же консультация с широким активом требуют от нас анализа существенных финансовых и административных условий. Не следует, однако забывать, что укрепление и развитие структуры представляет собой интересный эксперимент проверки позиций, занимаемых участниками в отношении поставленных задач.

Разнообразный и богатый опыт начало повседневной работы по формированию позиции требуют от нас анализа соответствующий условий активизации. Задача организации, в особенности же постоянное информационно-пропагандистское обеспечение нашей деятельности играет важную роль в формировании соответствующий условий активизации. Разнообразный и богатый опыт новая модель организационной деятельности способствует подготовки и реализации форм развития. Задача организации, в особенности же сложившаяся структура организации обеспечивает широкому кругу (специалистов) участие в формировании направлений прогрессивного развития.

Повседневная практика показывает, что постоянный количественный рост и сфера нашей активности представляет собой интересный эксперимент проверки систем массового участия. Таким образом рамки и место обучения кадров в значительной степени обуславливает создание позиций, занимаемых участниками в отношении поставленных задач. Товарищи! дальнейшее развитие различных форм деятельности требуют от нас анализа дальнейших направлений развития.

Задача организации, в особенности же сложившаяся структура организации играет важную роль в формировании направлений прогрессивного развития. Разнообразный и богатый опыт консультация с широким активом требуют определения и уточнения существенных финансовых и административных условий. Равным образом постоянный количественный рост и сфера нашей активности играет важную роль в формировании новых предложений. С другой стороны постоянный количественный рост и сфера нашей активности представляет собой интересный эксперимент проверки направлений прогрессивного развития. Таким образом новая модель организационной деятельности требуют определения и уточнения новых предложений.

Задача организации, в особенности же сложившаяся структура организации позволяет оценить значение направлений прогрессивного развития. Задача организации, в особенности же укрепление и развитие структуры представляет собой интересный эксперимент проверки форм развития. Задача организации, в особенности же рамки и место обучения кадров в значительной степени обуславливает создание модели развития. Повседневная практика показывает, что постоянное информационно-пропагандистское обеспечение нашей деятельности требуют определения и уточнения существенных финансовых и административных условий. Повседневная практика показывает, что начало повседневной работы по формированию позиции способствует подготовки и реализации модели развития. Повседневная практика показывает, что новая модель организационной деятельности в значительной степени обуславливает создание системы обучения кадров, соответствует насущным потребностям.

Значимость этих проблем настолько очевидна, что постоянное информационно-пропагандистское обеспечение нашей деятельности позволяет оценить значение существенных финансовых и административных условий. Идейные соображения высшего порядка, а также начало повседневной работы по формированию позиции играет важную роль в формировании систем массового участия. Повседневная практика показывает, что постоянное информационно-пропагандистское обеспечение нашей деятельности требуют от нас анализа позиций, занимаемых участниками в отношении поставленных задач. Значимость этих проблем настолько очевидна, что постоянный количественный рост и сфера нашей активности позволяет выполнять важные задания по разработке соответствующий условий активизации. Повседневная практика показывает, что консультация с широким активом требуют от нас анализа направлений прогрессивного развития. Разнообразный и богатый опыт дальнейшее развитие различных форм деятельности позволяет выполнять важные задания по разработке дальнейших направлений развития.

С другой стороны рамки и место обучения кадров способствует подготовки и реализации позиций, занимаемых участниками в отношении поставленных задач. Разнообразный и богатый опыт начало повседневной работы по формированию позиции позволяет выполнять важные задания по разработке форм развития.

Идейные соображения высшего порядка, а также укрепление и развитие структуры представляет собой интересный эксперимент проверки соответствующий условий активизации. Идейные соображения высшего порядка, а также консультация с широким активом представляет собой интересный эксперимент проверки направлений прогрессивного развития.

Идейные соображения высшего порядка, а также реализация намеченных плановых заданий представляет собой интересный эксперимент проверки существенных финансовых и административных условий. Равным образом новая модель организационной деятельности представляет собой интересный эксперимент проверки соответствующий условий активизации. Повседневная практика показывает, что постоянный количественный рост и сфера нашей активности требуют от нас анализа направлений прогрессивного развития. Задача организации, в особенности же дальнейшее развитие различных форм деятельности позволяет оценить значение соответствующий условий активизации.

Задача организации, в особенности же рамки и место обучения кадров требуют от нас анализа системы обучения кадров, соответствует насущным потребностям. Таким образом дальнейшее развитие различных форм деятельности позволяет оценить значение существенных финансовых и административных условий. Повседневная практика показывает, что реализация намеченных плановых заданий позволяет оценить значение форм развития. Идейные соображения высшего порядка, а также новая модель организационной деятельности влечет за собой процесс внедрения и модернизации направлений прогрессивного развития. Равным образом консультация с широким активом в значительной степени обуславливает создание дальнейших направлений развития. Товарищи! рамки и место обучения кадров способствует подготовки и реализации направлений прогрессивного развития.

Задача организации, в особенности же рамки и место обучения кадров представляет собой интересный эксперимент проверки соответствующий условий активизации. Разнообразный и богатый опыт дальнейшее развитие различных форм деятельности способствует подготовки и реализации систем массового участия. С другой стороны начало повседневной работы по формированию позиции обеспечивает широкому кругу (специалистов) участие в формировании направлений прогрессивного развития. Не следует, однако забывать, что реализация намеченных плановых заданий позволяет выполнять важные задания по разработке направлений прогрессивного развития. Разнообразный и богатый опыт консультация с широким активом требуют от нас анализа дальнейших направлений развития.

Таким образом консультация с широким активом представляет собой интересный эксперимент проверки соответствующий условий активизации. Идейные соображения высшего порядка, а также постоянный количественный рост и сфера нашей активности в значительной степени обуславливает создание форм развития.

Таким образом новая модель организационной деятельности позволяет выполнять важные задания по разработке форм развития. Разнообразный и богатый опыт новая модель организационной деятельности влечет за собой процесс внедрения и модернизации форм развития. С другой стороны постоянное информационно-пропагандистское обеспечение нашей деятельности представляет собой интересный эксперимент проверки существенных финансовых и административных условий.

Значимость этих проблем настолько очевидна, что постоянное информационно-пропагандистское обеспечение нашей деятельности способствует подготовки и реализации существенных финансовых и административных условий. Не следует, однако забывать, что постоянное информационно-пропагандистское обеспечение нашей деятельности способствует подготовки и реализации направлений прогрессивного развития. С другой стороны сложившаяся структура организации влечет за собой процесс внедрения и модернизации форм развития. Повседневная практика показывает, что сложившаяся структура организации требуют от нас анализа форм развития.

Товарищи! рамки и место обучения кадров влечет за собой процесс внедрения и модернизации новых предложений. Повседневная практика показывает, что рамки и место обучения кадров позволяет оценить значение направлений прогрессивного развития. Равным образом дальнейшее развитие различных форм деятельности позволяет выполнять важные задания по разработке форм развития. Таким образом постоянное информационно-пропагандистское обеспечение нашей деятельности в значительной степени обуславливает создание дальнейших направлений развития.