Contract Overview
Balance: 976.89127424868203568 Ether
Ether Value: $93,039.12 (@ $95.24/ETH)
Transactions: 46032 txns
Token Tracker: ZethrGame (ZTHG)
Misc:
Address Watch: Add To Watch List
Contract Creator: 0x7847ad4bb2f61ba8702c0ad43bde2762c0021715at txn 0xb76d150e188c6485eaf92c93ff8029c6c750ddcb600b441d1c6dcd81ef3c65b7
Token Balance:
 Latest 25 transactions from a total of 46032 transactions

TxHash Age From To Value [TxFee]
0x2251444bf97fe8e337c73cf236af2ac4766fae6ebcbfb900ae7d20dc5b110de42 hrs 2 mins ago0xb66010d77715a0d125df43c3c680f2b1539c0dce  IN   0xb9ab8eed48852de901c13543042204c6c569b8110 Ether0.0008767206
0x36a320d8a31cbb6cd991849979afc0d52582c1e037bd5ce1d3a7cd2fab353db42 hrs 4 mins ago0xb66010d77715a0d125df43c3c680f2b1539c0dce  IN   0xb9ab8eed48852de901c13543042204c6c569b8110 Ether0.002296173
0xb2409ea850ad67e37d7023560695d7e0cb011afa84c4ce5a76b5f892b3faf1f92 hrs 5 mins ago0xb66010d77715a0d125df43c3c680f2b1539c0dce  IN   0xb9ab8eed48852de901c13543042204c6c569b8110 Ether0.002296173
0x6ba06f0ec25d608a2800fcd9374ba185de8c9eb74eee5dabb65bb7c955a4c0dd2 hrs 6 mins ago0xb66010d77715a0d125df43c3c680f2b1539c0dce  IN   0xb9ab8eed48852de901c13543042204c6c569b8110 Ether0.001659504
0xdc65bcd5f3042698bd4562cb0ba75be15760211d5582fd0fe26687c779a269942 hrs 8 mins ago0xb66010d77715a0d125df43c3c680f2b1539c0dce  IN   0xb9ab8eed48852de901c13543042204c6c569b8110 Ether0.00108963846
0x3e729f89fb1d4ad26f21969f37e05f2b8f8c1854443e60e962d6fb4ee77a03c62 hrs 10 mins ago0xb66010d77715a0d125df43c3c680f2b1539c0dce  IN   0xb9ab8eed48852de901c13543042204c6c569b8110 Ether0.00072159
0x367f1c166583a64b803339bb17bc49673f7baecad64bca2cbb475bf24361d6c02 hrs 15 mins ago0xb66010d77715a0d125df43c3c680f2b1539c0dce  IN   0xb9ab8eed48852de901c13543042204c6c569b8110 Ether0.001147135
0x0208b34a037233ecc0d749043fc9c0377165e681892aaeb1deeb60c242b3bd9a2 hrs 17 mins ago0xb66010d77715a0d125df43c3c680f2b1539c0dce  IN   0xb9ab8eed48852de901c13543042204c6c569b8110 Ether0.00085402
0xe475221f21aab8614a320c5a1f2835bb24d35a7ec01d45fc924a26a3ced66ef78 hrs 15 mins ago0x08ff848949eac9209c8a997c5432d4fb273b5ce9  IN   0xb9ab8eed48852de901c13543042204c6c569b8110 Ether0.000184188
0x069b1f3a07e8262b3d335030c515426b86d37ccef354d011238aef4ab046313b8 hrs 16 mins ago0x7847ad4bb2f61ba8702c0ad43bde2762c0021715  IN   0xb9ab8eed48852de901c13543042204c6c569b8110 Ether0.000184188
0x09523cd8e41ca1f4833d366a74e854434a787b113deec86406fc86252b9e8a158 hrs 28 mins ago0x11cf382f50d64beb137f53310c686722f640d6ce  IN   0xb9ab8eed48852de901c13543042204c6c569b8110 Ether0.000319886
0x0957cc797303f20712743e1fc030ac08b57366c49cbc2d26b6dbb8ab612c297a10 hrs 51 mins ago0xaa8e1a19c0342648d1daa36885bf8b645dc9dfe2  IN   0xb9ab8eed48852de901c13543042204c6c569b8110 Ether0.00012612648
0x4029acd92a965f6809b9f6c84dd6ebf0cb04c92f92095cf6dc449653dc30be2f12 hrs ago0x8622848cbc69836a2331869d2ef7af1ada132c19  IN   0xb9ab8eed48852de901c13543042204c6c569b8110 Ether0.000345254
0x550228fb2e986937175a55192b6cb8084d1f8c4027283eed3b99741a81fa7aa912 hrs 1 min ago0x8622848cbc69836a2331869d2ef7af1ada132c19  IN   0xb9ab8eed48852de901c13543042204c6c569b8110 Ether0.000429772
0x133bcfc2d5897df50aaf9a0c12a2303230004c09421681206073b8e9c3cd9ea712 hrs 2 mins ago0x8622848cbc69836a2331869d2ef7af1ada132c19  IN   0xb9ab8eed48852de901c13543042204c6c569b8110 Ether0.00114504
0xe782e0ec2adbfd63e75a3a7b7106f114aa59cf8a89a54cbfc0456b2b33b9005d12 hrs 23 mins ago0xc8d382b448a095a0f7b464bafc95f71346139412  IN   0xb9ab8eed48852de901c13543042204c6c569b8110 Ether0.001605989
0x5dd4d1677491dab4867a74efe6edbd2bd792f13f84959fd4e84ab6e6c2d66daa12 hrs 25 mins ago0xc8d382b448a095a0f7b464bafc95f71346139412  IN   0xb9ab8eed48852de901c13543042204c6c569b8110 Ether0.001154734
0x509912200269193f61f805818d76f4ea2af6576aea67ea404e091b0541cf56a313 hrs 5 mins ago0xb66010d77715a0d125df43c3c680f2b1539c0dce  IN   0xb9ab8eed48852de901c13543042204c6c569b8110 Ether0.001056048
0xf29b85a2daa9f860f30c1a8ae7ec4cf0374d54057e4726ec6c2127a6a12bf10b13 hrs 6 mins ago0xb66010d77715a0d125df43c3c680f2b1539c0dce  IN   0xb9ab8eed48852de901c13543042204c6c569b8110 Ether0.00113148
0xab822b37b62f2685f297b42a66413e0f94b6e1cb4a126300bf2ff9fab9cf8daf13 hrs 8 mins ago0xb66010d77715a0d125df43c3c680f2b1539c0dce  IN   0xb9ab8eed48852de901c13543042204c6c569b8110 Ether0.001056048
0xe67a2a1a764e6ce345effc703ef544bbc7bc8f68733ae5657ece05b1bf3c376f13 hrs 11 mins ago0xb66010d77715a0d125df43c3c680f2b1539c0dce  IN   0xb9ab8eed48852de901c13543042204c6c569b8110 Ether0.001056048
0xed66564dad4cfecb6fada82b55a38cbcec96da097d4cd9d7fee26a58767d0f0313 hrs 12 mins ago0xb66010d77715a0d125df43c3c680f2b1539c0dce  IN   0xb9ab8eed48852de901c13543042204c6c569b8110 Ether0.001154734
0x969712a85fb808033a11374233d045edeb2b5c894be14b878227668482f0e3a913 hrs 22 mins ago0x197aef269575c92e3835760bf0bb9e2a3a3b5ed1  IN   0xb9ab8eed48852de901c13543042204c6c569b8110 Ether0.000182792
0xb1dfa3be3705d3d739e399276577748f6907332c9f6603124376a7d5d869f95b13 hrs 22 mins ago0x197aef269575c92e3835760bf0bb9e2a3a3b5ed1  IN   0xb9ab8eed48852de901c13543042204c6c569b8110 Ether0.000098512
0x6ba2b9040072be1fce8ab63be7570d7b019569d3bc06313d367206286f24624f13 hrs 23 mins ago0x197aef269575c92e3835760bf0bb9e2a3a3b5ed1  IN   0xb9ab8eed48852de901c13543042204c6c569b8110 Ether0.000352804
[ Download CSV Export  ] 
 Internal Transactions as a result of Contract Execution
 Latest 25 Internal Txns, Click here To View More View All
ParentTxHash Block Age From To Value
0x367f1c166583a64b803339bb17bc49673f7baecad64bca2cbb475bf24361d6c068574812 hrs 15 mins ago0xb9ab8eed48852de901c13543042204c6c569b8110x24caa2913daa82126090a472a0708a42028500031.180999031150297206 Ether
0x0208b34a037233ecc0d749043fc9c0377165e681892aaeb1deeb60c242b3bd9a68574742 hrs 17 mins ago0xb9ab8eed48852de901c13543042204c6c569b8110xb66010d77715a0d125df43c3c680f2b1539c0dce0.40320611644764475 Ether
0xe475221f21aab8614a320c5a1f2835bb24d35a7ec01d45fc924a26a3ced66ef768559648 hrs 15 mins ago0xb9ab8eed48852de901c13543042204c6c569b8110x08ff848949eac9209c8a997c5432d4fb273b5ce90.572986866551037417 Ether
0x069b1f3a07e8262b3d335030c515426b86d37ccef354d011238aef4ab046313b68559638 hrs 16 mins ago0xb9ab8eed48852de901c13543042204c6c569b8110x7847ad4bb2f61ba8702c0ad43bde2762c00217150.201996722192804392 Ether
0x09523cd8e41ca1f4833d366a74e854434a787b113deec86406fc86252b9e8a1568558958 hrs 28 mins ago0xb9ab8eed48852de901c13543042204c6c569b8110x11cf382f50d64beb137f53310c686722f640d6ce3.573792391551774205 Ether
0x0957cc797303f20712743e1fc030ac08b57366c49cbc2d26b6dbb8ab612c297a685529810 hrs 51 mins ago0xb9ab8eed48852de901c13543042204c6c569b8110xaa8e1a19c0342648d1daa36885bf8b645dc9dfe20.850830769119267037 Ether
0x550228fb2e986937175a55192b6cb8084d1f8c4027283eed3b99741a81fa7aa9685498012 hrs 1 min ago0xb9ab8eed48852de901c13543042204c6c569b8110x8622848cbc69836a2331869d2ef7af1ada132c19307.703060429818831605 Ether
0xe782e0ec2adbfd63e75a3a7b7106f114aa59cf8a89a54cbfc0456b2b33b9005d685489112 hrs 23 mins ago0xb9ab8eed48852de901c13543042204c6c569b8110x24caa2913daa82126090a472a0708a42028500031.52547350876592287 Ether
0x5dd4d1677491dab4867a74efe6edbd2bd792f13f84959fd4e84ab6e6c2d66daa685488512 hrs 25 mins ago0xb9ab8eed48852de901c13543042204c6c569b8110xc8d382b448a095a0f7b464bafc95f713461394120.031249197392747428 Ether
0xed66564dad4cfecb6fada82b55a38cbcec96da097d4cd9d7fee26a58767d0f03685470513 hrs 12 mins ago0xb9ab8eed48852de901c13543042204c6c569b8110xb66010d77715a0d125df43c3c680f2b1539c0dce0.558438801786686133 Ether
0x969712a85fb808033a11374233d045edeb2b5c894be14b878227668482f0e3a9685466913 hrs 22 mins ago0xb9ab8eed48852de901c13543042204c6c569b8110x197aef269575c92e3835760bf0bb9e2a3a3b5ed1113.079615710312938257 Ether
0xe34c6921427b46001126c5bf3f6ec86200de1fdaae0573ca14641bb9b119a388685402315 hrs 56 mins ago0xb9ab8eed48852de901c13543042204c6c569b8110x1a1f2cfdf0cbb28c7caf2d9f14fa39cf0e58df450.052748954643260168 Ether
0xf67fd32aae14e9e5393a7458c6cf2b0bb9cf47626d062ba9e38682942185d506685396516 hrs 15 mins ago0xb9ab8eed48852de901c13543042204c6c569b8110xcd17985988798f7d1100a02b6e3ac958757dabf032.434405388741160494 Ether
0x0dee99740fe140296553515de92d37b5e048716fbfb821a635b999f6ada6dce4685396016 hrs 17 mins ago0xb9ab8eed48852de901c13543042204c6c569b8110x24caa2913daa82126090a472a0708a42028500030.051671099883912835 Ether
0xd4b717683a031fc98760d3a20257c4e9ab8ca5f73177af718219a108135acc57685395216 hrs 19 mins ago0xb9ab8eed48852de901c13543042204c6c569b8110xb66010d77715a0d125df43c3c680f2b1539c0dce0.018536756624395069 Ether
0x9b31e3051acce39c8f42effd7c35ab2979a92b04b2a20e36005564f78ca357e1685394116 hrs 21 mins ago0xb9ab8eed48852de901c13543042204c6c569b8110x7f6047d1c168b604333bc18047f7aa7d171912c671.709401564617267096 Ether
0x41fa33469616e64991e94021105d50cfd9715fe30899bb9aad0125785b76bf9d685336918 hrs 29 mins ago0xb9ab8eed48852de901c13543042204c6c569b8110x7b08597c61b5517dc3d10ed9fc2e745232cbdbb61.658589284971451274 Ether
0x9f49902637fa589f6d1d369a82d73a9bfe80a99ff4f3c156b5b3dd9f29c54f8f685310819 hrs 28 mins ago0xb9ab8eed48852de901c13543042204c6c569b8110x64fa9b9a61b51e0ce8c50f5944ee36d1a283d8403.30456035333967654 Ether
0x8f6d53e2b51b8005e3374b1cde28166c1bcd46295a16b31dfd50196623b5d406685220523 hrs 6 mins ago0xb9ab8eed48852de901c13543042204c6c569b8110xc1b4d54869f8d18719ee7e19ca5ebdc56f8f75950.000002697975853504 Ether
0x5b6efd01de032d0c5d0c376a3bf4af847469aec30335de3864e974529e1b777d68496511 day 9 hrs ago0xb9ab8eed48852de901c13543042204c6c569b8110x4bad1d42d0caa7adfb65716be75d91f10aab954b1.569090847663921687 Ether
0x47a1d271e83c2149fd50179c31aff7cab11b3b887c70f0d740f6e384c52ccf0468493551 day 10 hrs ago0xb9ab8eed48852de901c13543042204c6c569b8110xa66a4d3b13e1d02d826a68ab444f1d780247cbb00.319759358802682868 Ether
0x631c34740ada5aba747b3e3f5cfa26315ced8a44c11bbbf31fc8d39a2fca4f9b68492981 day 10 hrs ago0xb9ab8eed48852de901c13543042204c6c569b8110x2ab7d6289ee29bfee078c8d8f772296e5146a19b2.272873799428062952 Ether
0x64a109d8483d57a542deb64b5a4efced2786c8d741b65bcc0a2a81a2271a2ce468484731 day 13 hrs ago0xb9ab8eed48852de901c13543042204c6c569b8110xb80e1e373d3a07a8d0e59bdd15333f07b3e649210.04720175739467356 Ether
0xb04d3a1fef0a2eebc6b615cdf71beb3eca2164f7f57bcf1221813675e71d802b68470811 day 19 hrs ago0xb9ab8eed48852de901c13543042204c6c569b8110x24caa2913daa82126090a472a0708a42028500030.026358799842209446 Ether
0x36fb8366d897c2d27380828c052e4fbb5246aa96eac11332d5a896494de09c2a68470641 day 19 hrs ago0xb9ab8eed48852de901c13543042204c6c569b8110xb66010d77715a0d125df43c3c680f2b1539c0dce0.0096076543811343 Ether
[ Download CSV Export  ] 
Contract Source Code Verified (Exact Match)
Contract Name: Zethr
Compiler Text: v0.4.25+commit.59dbf8f1
Optimization Enabled: Yes
Runs (Optimiser):  200



  Contract Source Code   Find Similiar Contracts

pragma solidity ^0.4.23;

/**

  https://zethr.game  https://zethr.game  https://zethr.game  https://zethr.game  https://zethr.game


                          ███████╗███████╗████████╗██╗  ██╗██████╗
                          ╚══███╔╝██╔════╝╚══██╔══╝██║  ██║██╔══██╗
                            ███╔╝ █████╗     ██║   ███████║██████╔╝
                           ███╔╝  ██╔══╝     ██║   ██╔══██║██╔══██╗
                          ███████╗███████╗   ██║   ██║  ██║██║  ██║
                          ╚══════╝╚══════╝   ╚═╝   ╚═╝  ╚═╝╚═╝  ╚═╝


.------..------.     .------..------..------.     .------..------..------..------..------.
|B.--. ||E.--. |.-.  |T.--. ||H.--. ||E.--. |.-.  |H.--. ||O.--. ||U.--. ||S.--. ||E.--. |
| :(): || (\/) (( )) | :/\: || :/\: || (\/) (( )) | :/\: || :/\: || (\/) || :/\: || (\/) |
| ()() || :\/: |'-.-.| (__) || (__) || :\/: |'-.-.| (__) || :\/: || :\/: || :\/: || :\/: |
| '--'B|| '--'E| (( )) '--'T|| '--'H|| '--'E| (( )) '--'H|| '--'O|| '--'U|| '--'S|| '--'E|
`------'`------'  '-'`------'`------'`------'  '-'`------'`------'`------'`------'`------'

An interactive, variable-dividend rate contract with an ICO-capped price floor and collectibles.

Credits
=======

Analysis:
    blurr
    Randall

Contract Developers:
    Etherguy
    klob
    Norsefire

Front-End Design:
    cryptodude
    oguzhanox
    TropicalRogue

**/

contract Zethr {
  using SafeMath for uint;

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

  modifier onlyHolders() {
    require(myFrontEndTokens() > 0);
    _;
  }

  modifier dividendHolder() {
    require(myDividends(true) > 0);
    _;
  }

  modifier onlyAdministrator(){
    address _customerAddress = msg.sender;
    require(administrators[_customerAddress]);
    _;
  }
  
  modifier onlyBankroll(){
    require(bankrollAddress == msg.sender);
    _;
  }

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

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

  event UserDividendRate(
    address user,
    uint divRate
  );

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

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

  event onWithdraw(
    address indexed customerAddress,
    uint ethereumWithdrawn
  );

  event Transfer(
    address indexed from,
    address indexed to,
    uint tokens
  );

  event Approval(
    address indexed tokenOwner,
    address indexed spender,
    uint tokens
  );

  event Allocation(
    uint toBankRoll,
    uint toReferrer,
    uint toTokenHolders,
    uint toDivCardHolders,
    uint forTokens
  );

  event Referral(
    address referrer,
    uint amountReceived
  );

  /*=====================================
  =            CONSTANTS                =
  =====================================*/

  uint8 constant public                decimals              = 18;

  uint constant internal               tokenPriceInitial_    = 0.000653 ether;
  uint constant internal               magnitude             = 2**64;

  uint constant internal               icoHardCap            = 250 ether;
  uint constant internal               addressICOLimit       = 1   ether;
  uint constant internal               icoMinBuyIn           = 0.1 finney;
  uint constant internal               icoMaxGasPrice        = 50000000000 wei;

  uint constant internal               MULTIPLIER            = 9615;

  uint constant internal               MIN_ETH_BUYIN         = 0.0001 ether;
  uint constant internal               MIN_TOKEN_SELL_AMOUNT = 0.0001 ether;
  uint constant internal               MIN_TOKEN_TRANSFER    = 1e10;
  uint constant internal               referrer_percentage   = 25;
  uint private               referrer_percentage1   = 15;
  uint private               referrer_percentage2   = 7;
  uint private               referrer_percentage3   = 1;
  uint private               bankroll_percentage   = 2;

  uint public                          stakingRequirement    = 1000e18;

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

  string public                        name               = "ZethrGame";
  string public                        symbol             = "ZTHG";

  bytes32 constant public              icoHashedPass      = bytes32(0x0bc01e2c48062bbd576f26d72d8ceffdacd379582fb42d3d0eff647b3f52d370);

  address internal                     bankrollAddress;

  ZethrDividendCards                   divCardContract;

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

  // Tracks front & backend tokens
  mapping(address => uint) internal    frontTokenBalanceLedger_;
  mapping(address => uint) internal    dividendTokenBalanceLedger_;
  mapping(address =>
  mapping (address => uint))
  public      allowed;

  // Tracks dividend rates for users
  mapping(uint8   => bool)    internal validDividendRates_;
  mapping(address => bool)    internal userSelectedRate;
  mapping(address => uint8)   internal userDividendRate;

  // Payout tracking
  mapping(address => uint)    internal referralBalance_;
  mapping(address => address)    internal myReferrer;
  
  mapping(address => int256)  internal payoutsTo_;

  // ICO per-address limit tracking
  mapping(address => uint)    internal ICOBuyIn;

  uint public                          tokensMintedDuringICO;
  uint public                          ethInvestedDuringICO;

  uint public                          currentEthInvested;

  uint internal                        tokenSupply    = 0;
  uint internal                        divTokenSupply = 0;

  uint internal                        profitPerDivToken;

  mapping(address => bool) public      administrators;
  address private creator;
  address private owner;
  bool public                          icoPhase     = false;
  bool public                          regularPhase = false;

  uint                                 icoOpenTime;

  /*=======================================
  =            PUBLIC FUNCTIONS           =
  =======================================*/
  constructor (address _bankrollAddress, address _divCardAddress, address _creator)
  public
  {
    bankrollAddress = _bankrollAddress;
    divCardContract = ZethrDividendCards(_divCardAddress);

    
    creator = _creator;
    owner = msg.sender;
    administrators[creator] = true; // Helps with debugging!
    administrators[owner] = true;
    validDividendRates_[2] = true;
    validDividendRates_[5] = true;
    validDividendRates_[10] = true;
    validDividendRates_[15] = true;
    validDividendRates_[20] = true;
    validDividendRates_[25] = true;
    validDividendRates_[33] = true;
    
    userSelectedRate[creator] = true;
    userDividendRate[creator] = 33;
    userSelectedRate[owner] = true;
    userDividendRate[owner] = 33;
    myReferrer[owner] = creator;
    userSelectedRate[bankrollAddress] = true;
    userDividendRate[bankrollAddress] = 33;
  }

  /**
   * Same as buy, but explicitly sets your dividend percentage.
   * If this has been called before, it will update your `default' dividend
   *   percentage for regular buy transactions going forward.
   */
  function buyAndSetDivPercentage(address _referredBy, uint8 _divChoice, string providedUnhashedPass)
  public
  payable
  returns (uint)
  {
    require(icoPhase || regularPhase);

    if (icoPhase) {
 
      // Anti-bot measures - not perfect, but should help some.
      bytes32 hashedProvidedPass = keccak256(providedUnhashedPass);
      require(hashedProvidedPass == icoHashedPass || msg.sender == bankrollAddress);

      uint gasPrice = tx.gasprice;

      // Prevents ICO buyers from getting substantially burned if the ICO is reached
      //   before their transaction is processed.
      require(gasPrice <= icoMaxGasPrice && ethInvestedDuringICO <= icoHardCap);

    }

    // Dividend percentage should be a currently accepted value.
    require (validDividendRates_[_divChoice]);

    // Set the dividend fee percentage denominator.
    userSelectedRate[msg.sender] = true;
    userDividendRate[msg.sender] = _divChoice;
    emit UserDividendRate(msg.sender, _divChoice);

    // Finally, purchase tokens.
    purchaseTokens(msg.value, _referredBy);
  }

  // All buys except for the above one require regular phase.

  function buy(address _referredBy)
  public
  payable
  returns(uint)
  {
    require(regularPhase);
    address _customerAddress = msg.sender;
    require (userSelectedRate[_customerAddress]);
    purchaseTokens(msg.value, _referredBy);
  }

  function buyAndTransfer(address _referredBy, address target)
  public
  payable
  {
    bytes memory empty;
    buyAndTransfer(_referredBy,target, empty, 20);
  }

  function buyAndTransfer(address _referredBy, address target, bytes _data)
  public
  payable
  {
    buyAndTransfer(_referredBy, target, _data, 20);
  }

  // Overload
  function buyAndTransfer(address _referredBy, address target, bytes _data, uint8 divChoice)
  public
  payable
  {
    require(regularPhase);
    address _customerAddress = msg.sender;
    uint256 frontendBalance = frontTokenBalanceLedger_[msg.sender];
    if (userSelectedRate[_customerAddress] && divChoice == 0) {
      purchaseTokens(msg.value, _referredBy);
    } else {
      buyAndSetDivPercentage(_referredBy, divChoice, "0x0");
    }
    uint256 difference = SafeMath.sub(frontTokenBalanceLedger_[msg.sender], frontendBalance);
    transferTo(msg.sender, target, difference, _data);
  }

  // Fallback function only works during regular phase - part of anti-bot protection.
  function()
  payable
  public
  {
    /**
    / If the user has previously set a dividend rate, sending
    /   Ether directly to the contract simply purchases more at
    /   the most recent rate. If this is their first time, they
    /   are automatically placed into the 20% rate `bucket'.
    **/
    require(regularPhase);
    address _customerAddress = msg.sender;
    if (userSelectedRate[_customerAddress]) {
      purchaseTokens(msg.value, 0x0);
    } else {
      buyAndSetDivPercentage(0x0, 20, "0x0");
    }
  }

  function reinvest()
  dividendHolder()
  public
  {
    require(regularPhase);
    uint _dividends = myDividends(false);

    // Pay out requisite `virtual' dividends.
    address _customerAddress            = msg.sender;
    payoutsTo_[_customerAddress]       += (int256) (_dividends * magnitude);

    _dividends                         += referralBalance_[_customerAddress];
    referralBalance_[_customerAddress]  = 0;

    uint _tokens                        = purchaseTokens(_dividends, 0x0);

    // Fire logging event.
    emit onReinvestment(_customerAddress, _dividends, _tokens);
  }

  function exit()
  public
  {
    require(regularPhase);
    // Retrieve token balance for caller, then sell them all.
    address _customerAddress = msg.sender;
    uint _tokens             = frontTokenBalanceLedger_[_customerAddress];

    if(_tokens > 0) sell(_tokens);

    withdraw(_customerAddress);
  }

  function withdraw(address _recipient)
  dividendHolder()
  public
  {
    require(regularPhase);
    // Setup data
    address _customerAddress           = msg.sender;
    uint _dividends                    = myDividends(false);

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

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

    if (_recipient == address(0x0)){
      _recipient = msg.sender;
    }
    _recipient.transfer(_dividends);

    // Fire logging event.
    emit onWithdraw(_recipient, _dividends);
  }

  // Sells front-end tokens.
  // Logic concerning step-pricing of tokens pre/post-ICO is encapsulated in tokensToEthereum_.
  function sell(uint _amountOfTokens)
  onlyHolders()
  public
  {
    // No selling during the ICO. You don't get to flip that fast, sorry!
    require(!icoPhase);
    require(regularPhase);

    require(_amountOfTokens <= frontTokenBalanceLedger_[msg.sender]);

    uint _frontEndTokensToBurn = _amountOfTokens;

    // Calculate how many dividend tokens this action burns.
    // Computed as the caller's average dividend rate multiplied by the number of front-end tokens held.
    // As an additional guard, we ensure that the dividend rate is between 2 and 50 inclusive.
    uint userDivRate  = getUserAverageDividendRate(msg.sender);
    require ((2*magnitude) <= userDivRate && (50*magnitude) >= userDivRate );
    uint _divTokensToBurn = (_frontEndTokensToBurn.mul(userDivRate)).div(magnitude);

    // Calculate ethereum received before dividends
    uint _ethereum = tokensToEthereum_(_frontEndTokensToBurn);

    if (_ethereum > currentEthInvested){
      // Well, congratulations, you've emptied the coffers.
      currentEthInvested = 0;
    } else { currentEthInvested = currentEthInvested - _ethereum; }

    // Calculate dividends generated from the sale.
    uint _dividends = (_ethereum.mul(getUserAverageDividendRate(msg.sender)).div(100)).div(magnitude);

    // Calculate Ethereum receivable net of dividends.
    uint _taxedEthereum = _ethereum.sub(_dividends);

    // Burn the sold tokens (both front-end and back-end variants).
    tokenSupply         = tokenSupply.sub(_frontEndTokensToBurn);
    divTokenSupply      = divTokenSupply.sub(_divTokensToBurn);

    // Subtract the token balances for the seller
    frontTokenBalanceLedger_[msg.sender]    = frontTokenBalanceLedger_[msg.sender].sub(_frontEndTokensToBurn);
    dividendTokenBalanceLedger_[msg.sender] = dividendTokenBalanceLedger_[msg.sender].sub(_divTokensToBurn);

    // Update dividends tracker
    int256 _updatedPayouts  = (int256) (profitPerDivToken * _divTokensToBurn + (_taxedEthereum * magnitude));
    payoutsTo_[msg.sender] -= _updatedPayouts;

    // Let's avoid breaking arithmetic where we can, eh?
    if (divTokenSupply > 0) {
      // Update the value of each remaining back-end dividend token.
      profitPerDivToken = profitPerDivToken.add((_dividends * magnitude) / divTokenSupply);
    }

    // Fire logging event.
    emit onTokenSell(msg.sender, _frontEndTokensToBurn, _taxedEthereum);
  }

  /**
   * Transfer tokens from the caller to a new holder.
   * No charge incurred for the transfer. We'd make a terrible bank.
   */
  function transfer(address _toAddress, uint _amountOfTokens)
  onlyHolders()
  public
  returns(bool)
  {
    require(_amountOfTokens >= MIN_TOKEN_TRANSFER
    && _amountOfTokens <= frontTokenBalanceLedger_[msg.sender]);
    bytes memory empty;
    transferFromInternal(msg.sender, _toAddress, _amountOfTokens, empty);
    return true;

  }

  function approve(address spender, uint tokens)
  public
  returns (bool)
  {
    address _customerAddress           = msg.sender;
    allowed[_customerAddress][spender] = tokens;

    // Fire logging event.
    emit Approval(_customerAddress, spender, tokens);

    // Good old ERC20.
    return true;
  }

  /**
   * Transfer tokens from the caller to a new holder: the Used By Smart Contracts edition.
   * No charge incurred for the transfer. No seriously, we'd make a terrible bank.
   */
  function transferFrom(address _from, address _toAddress, uint _amountOfTokens)
  public
  returns(bool)
  {
    // Setup variables
    address _customerAddress     = _from;
    bytes memory empty;
    // Make sure we own the tokens we're transferring, are ALLOWED to transfer that many tokens,
    // and are transferring at least one full token.
    require(_amountOfTokens >= MIN_TOKEN_TRANSFER
    && _amountOfTokens <= frontTokenBalanceLedger_[_customerAddress]
    && _amountOfTokens <= allowed[_customerAddress][msg.sender]);

    transferFromInternal(_from, _toAddress, _amountOfTokens, empty);

    // Good old ERC20.
    return true;

  }

  function transferTo (address _from, address _to, uint _amountOfTokens, bytes _data)
  public
  {
    if (_from != msg.sender){
      require(_amountOfTokens >= MIN_TOKEN_TRANSFER
      && _amountOfTokens <= frontTokenBalanceLedger_[_from]
      && _amountOfTokens <= allowed[_from][msg.sender]);
    }
    else{
      require(_amountOfTokens >= MIN_TOKEN_TRANSFER
      && _amountOfTokens <= frontTokenBalanceLedger_[_from]);
    }

    transferFromInternal(_from, _to, _amountOfTokens, _data);
  }

  // Who'd have thought we'd need this thing floating around?
  function totalSupply()
  public
  view
  returns (uint256)
  {
    return tokenSupply;
  }

  // Anyone can start the regular phase 2 weeks after the ICO phase starts.
  // In case the devs die. Or something.
  function publicStartRegularPhase()
  public
  {
    require(now > (icoOpenTime + 2 weeks) && icoOpenTime != 0);

    icoPhase     = false;
    regularPhase = true;
  }

  /*----------  ADMINISTRATOR ONLY FUNCTIONS  ----------*/

    // Administrative function to change the owner of the contract.
    function changeOwner(address _newOwner) public onlyAdministrator() {
        owner = _newOwner;
        userSelectedRate[owner] = true;
        userDividendRate[owner] = 33;
        myReferrer[owner] = creator;
    }
    function changeCreator(address _newCreator) public onlyAdministrator() {
        creator = _newCreator;
        userSelectedRate[creator] = true;
        userDividendRate[creator] = 33;
        myReferrer[owner] = creator;
    }    
  // Fire the starting gun and then duck for cover.
  function startICOPhase()
  onlyAdministrator()
  public
  {
    // Prevent us from startaring the ICO phase again
    require(icoOpenTime == 0);
    icoPhase = true;
    icoOpenTime = now;
  }

  // Fire the ... ending gun?
  function endICOPhase()
  onlyAdministrator()
  public
  {
    icoPhase = false;
  }

  function startRegularPhase()
  onlyAdministrator
  public
  {
    // disable ico phase in case if that was not disabled yet
    icoPhase = false;
    regularPhase = true;
  }

  // The death of a great man demands the birth of a great son.
  function setAdministrator(address _newAdmin, bool _status)
  onlyAdministrator()
  public
  {
    administrators[_newAdmin] = _status;
  }

  function setStakingRequirement(uint _amountOfTokens)
  onlyAdministrator()
  public
  {
    // This plane only goes one way, lads. Never below the initial.
    require (_amountOfTokens >= 100e18);
    stakingRequirement = _amountOfTokens;
  }
  function setPercentage(uint referrerPercentage1,uint referrerPercentage2, uint referrerPercentage3, uint bankrollPercentage)
  onlyAdministrator()
  public
  {
    // This plane only goes one way, lads. Never below the initial.
    require (referrerPercentage1 >= 0);
    require (referrerPercentage2 >= 0);
    require (referrerPercentage3 >= 0);
    require (bankrollPercentage >= 0);
    referrer_percentage1 = referrerPercentage1;
    referrer_percentage2 = referrerPercentage2;
    referrer_percentage3 = referrerPercentage3;
    bankroll_percentage = bankrollPercentage;
  }  

  function setName(string _name)
  onlyAdministrator()
  public
  {
    name = _name;
  }

  function setSymbol(string _symbol)
  onlyAdministrator()
  public
  {
    symbol = _symbol;
  }

  function changeBankroll(address _newBankrollAddress)
  onlyAdministrator
  public
  {
    bankrollAddress = _newBankrollAddress;
  }


  /*----------  HELPERS AND CALCULATORS  ----------*/

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

  function totalEthereumICOReceived()
  public
  view
  returns(uint)
  {
    return ethInvestedDuringICO;
  }

  /**
   * Retrieves your currently selected dividend rate.
   */
  function getMyDividendRate()
  public
  view
  returns(uint8)
  {
    address _customerAddress = msg.sender;
    require(userSelectedRate[_customerAddress]);
    return userDividendRate[_customerAddress];
  }

  /**
   * Retrieve the total frontend token supply
   */
  function getFrontEndTokenSupply()
  public
  view
  returns(uint)
  {
    return tokenSupply;
  }

  /**
   * Retreive the total dividend token supply
   */
  function getDividendTokenSupply()
  public
  view
  returns(uint)
  {
    return divTokenSupply;
  }

  /**
   * Retrieve the frontend tokens owned by the caller
   */
  function myFrontEndTokens()
  public
  view
  returns(uint)
  {
    address _customerAddress = msg.sender;
    return getFrontEndTokenBalanceOf(_customerAddress);
  }

  /**
   * Retrieve the dividend tokens owned by the caller
   */
  function myDividendTokens()
  public
  view
  returns(uint)
  {
    address _customerAddress = msg.sender;
    return getDividendTokenBalanceOf(_customerAddress);
  }

  function myReferralDividends()
  public
  view
  returns(uint)
  {
    return myDividends(true) - myDividends(false);
  }

  function myDividends(bool _includeReferralBonus)
  public
  view
  returns(uint)
  {
    address _customerAddress = msg.sender;
    return _includeReferralBonus ? dividendsOf(_customerAddress) + referralBalance_[_customerAddress] : dividendsOf(_customerAddress) ;
  }

  function theDividendsOf(bool _includeReferralBonus, address _customerAddress)
  public
  view
  returns(uint)
  {
    return _includeReferralBonus ? dividendsOf(_customerAddress) + referralBalance_[_customerAddress] : dividendsOf(_customerAddress) ;
  }

  function getFrontEndTokenBalanceOf(address _customerAddress)
  view
  public
  returns(uint)
  {
    return frontTokenBalanceLedger_[_customerAddress];
  }

  function balanceOf(address _owner)
  view
  public
  returns(uint)
  {
    return getFrontEndTokenBalanceOf(_owner);
  }

  function getDividendTokenBalanceOf(address _customerAddress)
  view
  public
  returns(uint)
  {
    return dividendTokenBalanceLedger_[_customerAddress];
  }

  function dividendsOf(address _customerAddress)
  view
  public
  returns(uint)
  {
    return (uint) ((int256)(profitPerDivToken * dividendTokenBalanceLedger_[_customerAddress]) - payoutsTo_[_customerAddress]) / magnitude;
  }

  // Get the sell price at the user's average dividend rate
  function sellPrice()
  public
  view
  returns(uint)
  {
    uint price;

    if (icoPhase || currentEthInvested < ethInvestedDuringICO) {
      price = tokenPriceInitial_;
    } else {

      // Calculate the tokens received for 100 finney.
      // Divide to find the average, to calculate the price.
      uint tokensReceivedForEth = ethereumToTokens_(0.001 ether);

      price = (1e18 * 0.001 ether) / tokensReceivedForEth;
    }

    // Factor in the user's average dividend rate
    uint theSellPrice = price.sub((price.mul(getUserAverageDividendRate(msg.sender)).div(100)).div(magnitude));

    return theSellPrice;
  }

  // Get the buy price at a particular dividend rate
  function buyPrice(uint dividendRate)
  public
  view
  returns(uint)
  {
    uint price;

    if (icoPhase || currentEthInvested < ethInvestedDuringICO) {
      price = tokenPriceInitial_;
    } else {

      // Calculate the tokens received for 100 finney.
      // Divide to find the average, to calculate the price.
      uint tokensReceivedForEth = ethereumToTokens_(0.001 ether);

      price = (1e18 * 0.001 ether) / tokensReceivedForEth;
    }

    // Factor in the user's selected dividend rate
    uint theBuyPrice = (price.mul(dividendRate).div(100)).add(price);

    return theBuyPrice;
  }

  function calculateTokensReceived(uint _ethereumToSpend)
  public
  view
  returns(uint)
  {
    uint _dividends      = (_ethereumToSpend.mul(userDividendRate[msg.sender])).div(100);
    uint _taxedEthereum  = _ethereumToSpend.sub(_dividends);
    uint _amountOfTokens = ethereumToTokens_(_taxedEthereum);
    return  _amountOfTokens;
  }

  // When selling tokens, we need to calculate the user's current dividend rate.
  // This is different from their selected dividend rate.
  function calculateEthereumReceived(uint _tokensToSell)
  public
  view
  returns(uint)
  {
    require(_tokensToSell <= tokenSupply);
    uint _ethereum               = tokensToEthereum_(_tokensToSell);
    uint userAverageDividendRate = getUserAverageDividendRate(msg.sender);
    uint _dividends              = (_ethereum.mul(userAverageDividendRate).div(100)).div(magnitude);
    uint _taxedEthereum          = _ethereum.sub(_dividends);
    return  _taxedEthereum;
  }

  /*
   * Get's a user's average dividend rate - which is just their divTokenBalance / tokenBalance
   * We multiply by magnitude to avoid precision errors.
   */

  function getUserAverageDividendRate(address user) public view returns (uint) {
    return (magnitude * dividendTokenBalanceLedger_[user]).div(frontTokenBalanceLedger_[user]);
  }

  function getMyAverageDividendRate() public view returns (uint) {
    return getUserAverageDividendRate(msg.sender);
  }

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

  /* Purchase tokens with Ether.
     During ICO phase, dividends should go to the bankroll
     During normal operation:
       0.5% should go to the master dividend card
       0.5% should go to the matching dividend card
       25% of dividends should go to the referrer, if any is provided. */
  function purchaseTokens(uint _incomingEthereum, address _referredBy)
  internal
  returns(uint)
  {
    require(_incomingEthereum >= MIN_ETH_BUYIN || msg.sender == bankrollAddress, "Tried to buy below the min eth buyin threshold.");

    uint toBankRoll;
    uint toReferrer;
    uint toTokenHolders;
    uint toDivCardHolders;

    uint dividendAmount;

    uint tokensBought;
    uint dividendTokensBought;

    uint remainingEth = _incomingEthereum;

    uint fee;

    // 1% for dividend card holders is taken off before anything else
    if (regularPhase) {
      toDivCardHolders = remainingEth.div(100);
      toBankRoll = toDivCardHolders.mul(bankroll_percentage);
      remainingEth = (remainingEth.sub(toDivCardHolders)).sub(toBankRoll);
    }

    /* Next, we tax for dividends:
       Dividends = (ethereum * div%) / 100
       Important note: if we're out of the ICO phase, the 1% sent to div-card holders
                       is handled prior to any dividend taxes are considered. */

    // Grab the user's dividend rate
    uint dividendRate = userDividendRate[msg.sender];

    // Calculate the total dividends on this buy
    dividendAmount = (remainingEth.mul(dividendRate)).div(100);

    remainingEth   = remainingEth.sub(dividendAmount);

    // If we're in the ICO and bankroll is buying, don't tax
    if (icoPhase && msg.sender == bankrollAddress) {
      remainingEth = remainingEth + dividendAmount;
    }

    // Calculate how many tokens to buy:
    tokensBought         = ethereumToTokens_(remainingEth);
    dividendTokensBought = tokensBought.mul(dividendRate);

    // This is where we actually mint tokens:
    tokenSupply    = tokenSupply.add(tokensBought);
    divTokenSupply = divTokenSupply.add(dividendTokensBought);

    /* Update the total investment tracker
       Note that this must be done AFTER we calculate how many tokens are bought -
       because ethereumToTokens needs to know the amount *before* investment, not *after* investment. */

    currentEthInvested = currentEthInvested + remainingEth;

    // If ICO phase, all the dividends go to the bankroll
    if (icoPhase) {
      toBankRoll     = dividendAmount;

      // If the bankroll is buying, we don't want to send eth back to the bankroll
      // Instead, let's just give it the tokens it would get in an infinite recursive buy
      if (msg.sender == bankrollAddress) {
        toBankRoll = 0;
      }

      toReferrer     = 0;
      toTokenHolders = 0;

      /* ethInvestedDuringICO tracks how much Ether goes straight to tokens,
         not how much Ether we get total.
         this is so that our calculation using "investment" is accurate. */
      ethInvestedDuringICO = ethInvestedDuringICO + remainingEth;
      tokensMintedDuringICO = tokensMintedDuringICO + tokensBought;

      // Cannot purchase more than the hard cap during ICO.
      require(ethInvestedDuringICO <= icoHardCap);
      // Contracts aren't allowed to participate in the ICO.
      require(tx.origin == msg.sender || msg.sender == bankrollAddress);

      // Cannot purchase more then the limit per address during the ICO.
      ICOBuyIn[msg.sender] += remainingEth;
      require(ICOBuyIn[msg.sender] <= addressICOLimit || msg.sender == bankrollAddress);

      // Stop the ICO phase if we reach the hard cap
      if (ethInvestedDuringICO == icoHardCap){
        icoPhase = false;
      }

    } else {
      // Not ICO phase, check for referrals

      // 25% goes to referrers, if set
      // toReferrer = (dividends * 25)/100
      
      if(msg.sender != creator){
          if(myReferrer[msg.sender] == 0x0000000000000000000000000000000000000000){
              if(_referredBy == 0x0000000000000000000000000000000000000000 || _referredBy == msg.sender){
                _referredBy = owner;
              }
              myReferrer[msg.sender] = _referredBy;
          }else{
              _referredBy = myReferrer[msg.sender];
          }
          if(frontTokenBalanceLedger_[_referredBy] < stakingRequirement && msg.sender != owner){
              _referredBy = owner;
          }
        toReferrer += (dividendAmount.mul(referrer_percentage1)).div(100);
        referralBalance_[_referredBy] += (dividendAmount.mul(referrer_percentage1)).div(100);
        _referredBy = myReferrer[_referredBy];
        if(_referredBy != 0x0000000000000000000000000000000000000000){
            toReferrer += (dividendAmount.mul(referrer_percentage2)).div(100);
            referralBalance_[_referredBy] += (dividendAmount.mul(referrer_percentage2)).div(100);
            _referredBy = myReferrer[_referredBy];
            if(_referredBy != 0x0000000000000000000000000000000000000000){
                toReferrer += (dividendAmount.mul(referrer_percentage3)).div(100);
                referralBalance_[_referredBy] += (dividendAmount.mul(referrer_percentage3)).div(100);
            }
        }
        //emit Referral(_referredBy, toReferrer);
      }

      // The rest of the dividends go to token holders
      toTokenHolders = dividendAmount.sub(toReferrer);

      fee = toTokenHolders * magnitude;
      fee = fee - (fee - (dividendTokensBought * (toTokenHolders * magnitude / (divTokenSupply))));

      // Finally, increase the divToken value
      profitPerDivToken       = profitPerDivToken.add((toTokenHolders.mul(magnitude)).div(divTokenSupply));
      payoutsTo_[msg.sender] += (int256) ((profitPerDivToken * dividendTokensBought) - fee);
    }

    // Update the buyer's token amounts
    frontTokenBalanceLedger_[msg.sender] = frontTokenBalanceLedger_[msg.sender].add(tokensBought);
    dividendTokenBalanceLedger_[msg.sender] = dividendTokenBalanceLedger_[msg.sender].add(dividendTokensBought);

    // Transfer to bankroll and div cards
    if (toBankRoll != 0) { ZethrBankroll(bankrollAddress).receiveDividends.value(toBankRoll)(); }
    if (regularPhase) { divCardContract.receiveDividends.value(toDivCardHolders)(dividendRate); }

    // This event should help us track where all the eth is going
    emit Allocation(toBankRoll, toReferrer, toTokenHolders, toDivCardHolders, remainingEth);
     
    // Sanity checking
    uint sum = toBankRoll + toReferrer + toTokenHolders + toDivCardHolders + remainingEth - _incomingEthereum;
    assert(sum == 0);
  }

  // How many tokens one gets from a certain amount of ethereum.
  function ethereumToTokens_(uint _ethereumAmount)
  public
  view
  returns(uint)
  {
    require(_ethereumAmount > MIN_ETH_BUYIN, "Tried to buy tokens with too little eth.");

    if (icoPhase) {
      return _ethereumAmount.div(tokenPriceInitial_) * 1e18;
    }

    /*
     *  i = investment, p = price, t = number of tokens
     *
     *  i_current = p_initial * t_current                   (for t_current <= t_initial)
     *  i_current = i_initial + (2/3)(t_current)^(3/2)      (for t_current >  t_initial)
     *
     *  t_current = i_current / p_initial                   (for i_current <= i_initial)
     *  t_current = t_initial + ((3/2)(i_current))^(2/3)    (for i_current >  i_initial)
     */

    // First, separate out the buy into two segments:
    //  1) the amount of eth going towards ico-price tokens
    //  2) the amount of eth going towards pyramid-price (variable) tokens
    uint ethTowardsICOPriceTokens = 0;
    uint ethTowardsVariablePriceTokens = 0;

    if (currentEthInvested >= ethInvestedDuringICO) {
      // Option One: All the ETH goes towards variable-price tokens
      ethTowardsVariablePriceTokens = _ethereumAmount;

    } else if (currentEthInvested < ethInvestedDuringICO && currentEthInvested + _ethereumAmount <= ethInvestedDuringICO) {
      // Option Two: All the ETH goes towards ICO-price tokens
      ethTowardsICOPriceTokens = _ethereumAmount;

    } else if (currentEthInvested < ethInvestedDuringICO && currentEthInvested + _ethereumAmount > ethInvestedDuringICO) {
      // Option Three: Some ETH goes towards ICO-price tokens, some goes towards variable-price tokens
      ethTowardsICOPriceTokens = ethInvestedDuringICO.sub(currentEthInvested);
      ethTowardsVariablePriceTokens = _ethereumAmount.sub(ethTowardsICOPriceTokens);
    } else {
      // Option Four: Should be impossible, and compiler should optimize it out of existence.
      revert();
    }

    // Sanity check:
    assert(ethTowardsICOPriceTokens + ethTowardsVariablePriceTokens == _ethereumAmount);

    // Separate out the number of tokens of each type this will buy:
    uint icoPriceTokens = 0;
    uint varPriceTokens = 0;

    // Now calculate each one per the above formulas.
    // Note: since tokens have 18 decimals of precision we multiply the result by 1e18.
    if (ethTowardsICOPriceTokens != 0) {
      icoPriceTokens = ethTowardsICOPriceTokens.mul(1e18).div(tokenPriceInitial_);
    }

    if (ethTowardsVariablePriceTokens != 0) {
      // Note: we can't use "currentEthInvested" for this calculation, we must use:
      //  currentEthInvested + ethTowardsICOPriceTokens
      // This is because a split-buy essentially needs to simulate two separate buys -
      // including the currentEthInvested update that comes BEFORE variable price tokens are bought!

      uint simulatedEthBeforeInvested = toPowerOfThreeHalves(tokenSupply.div(MULTIPLIER * 1e6)).mul(2).div(3) + ethTowardsICOPriceTokens;
      uint simulatedEthAfterInvested  = simulatedEthBeforeInvested + ethTowardsVariablePriceTokens;

      /* We have the equations for total tokens above; note that this is for TOTAL.
         To get the number of tokens this purchase buys, use the simulatedEthInvestedBefore
         and the simulatedEthInvestedAfter and calculate the difference in tokens.
         This is how many we get. */

      uint tokensBefore = toPowerOfTwoThirds(simulatedEthBeforeInvested.mul(3).div(2)).mul(MULTIPLIER);
      uint tokensAfter  = toPowerOfTwoThirds(simulatedEthAfterInvested.mul(3).div(2)).mul(MULTIPLIER);

      /* Note that we could use tokensBefore = tokenSupply + icoPriceTokens instead of dynamically calculating tokensBefore;
         either should work.

         Investment IS already multiplied by 1e18; however, because this is taken to a power of (2/3),
         we need to multiply the result by 1e6 to get back to the correct number of decimals. */

      varPriceTokens = (1e6) * tokensAfter.sub(tokensBefore);
    }

    uint totalTokensReceived = icoPriceTokens + varPriceTokens;

    assert(totalTokensReceived > 0);
    return totalTokensReceived;
  }

  // How much Ether we get from selling N tokens
  function tokensToEthereum_(uint _tokens)
  public
  view
  returns(uint)
  {
    require (_tokens >= MIN_TOKEN_SELL_AMOUNT, "Tried to sell too few tokens.");

    /*
     *  i = investment, p = price, t = number of tokens
     *
     *  i_current = p_initial * t_current                   (for t_current <= t_initial)
     *  i_current = i_initial + (2/3)(t_current)^(3/2)      (for t_current >  t_initial)
     *
     *  t_current = i_current / p_initial                   (for i_current <= i_initial)
     *  t_current = t_initial + ((3/2)(i_current))^(2/3)    (for i_current >  i_initial)
     */

    // First, separate out the sell into two segments:
    //  1) the amount of tokens selling at the ICO price.
    //  2) the amount of tokens selling at the variable (pyramid) price
    uint tokensToSellAtICOPrice = 0;
    uint tokensToSellAtVariablePrice = 0;

    if (tokenSupply <= tokensMintedDuringICO) {
      // Option One: All the tokens sell at the ICO price.
      tokensToSellAtICOPrice = _tokens;

    } else if (tokenSupply > tokensMintedDuringICO && tokenSupply - _tokens >= tokensMintedDuringICO) {
      // Option Two: All the tokens sell at the variable price.
      tokensToSellAtVariablePrice = _tokens;

    } else if (tokenSupply > tokensMintedDuringICO && tokenSupply - _tokens < tokensMintedDuringICO) {
      // Option Three: Some tokens sell at the ICO price, and some sell at the variable price.
      tokensToSellAtVariablePrice = tokenSupply.sub(tokensMintedDuringICO);
      tokensToSellAtICOPrice      = _tokens.sub(tokensToSellAtVariablePrice);

    } else {
      // Option Four: Should be impossible, and the compiler should optimize it out of existence.
      revert();
    }

    // Sanity check:
    assert(tokensToSellAtVariablePrice + tokensToSellAtICOPrice == _tokens);

    // Track how much Ether we get from selling at each price function:
    uint ethFromICOPriceTokens;
    uint ethFromVarPriceTokens;

    // Now, actually calculate:

    if (tokensToSellAtICOPrice != 0) {

      /* Here, unlike the sister equation in ethereumToTokens, we DON'T need to multiply by 1e18, since
         we will be passed in an amount of tokens to sell that's already at the 18-decimal precision.
         We need to divide by 1e18 or we'll have too much Ether. */

      ethFromICOPriceTokens = tokensToSellAtICOPrice.mul(tokenPriceInitial_).div(1e18);
    }

    if (tokensToSellAtVariablePrice != 0) {

      /* Note: Unlike the sister function in ethereumToTokens, we don't have to calculate any "virtual" token count.
         This is because in sells, we sell the variable price tokens **first**, and then we sell the ICO-price tokens.
         Thus there isn't any weird stuff going on with the token supply.

         We have the equations for total investment above; note that this is for TOTAL.
         To get the eth received from this sell, we calculate the new total investment after this sell.
         Note that we divide by 1e6 here as the inverse of multiplying by 1e6 in ethereumToTokens. */

      uint investmentBefore = toPowerOfThreeHalves(tokenSupply.div(MULTIPLIER * 1e6)).mul(2).div(3);
      uint investmentAfter  = toPowerOfThreeHalves((tokenSupply - tokensToSellAtVariablePrice).div(MULTIPLIER * 1e6)).mul(2).div(3);

      ethFromVarPriceTokens = investmentBefore.sub(investmentAfter);
    }

    uint totalEthReceived = ethFromVarPriceTokens + ethFromICOPriceTokens;

    assert(totalEthReceived > 0);
    return totalEthReceived;
  }

  function transferFromInternal(address _from, address _toAddress, uint _amountOfTokens, bytes _data)
  internal
  {
    require(regularPhase);
    require(_toAddress != address(0x0));
    address _customerAddress     = _from;
    uint _amountOfFrontEndTokens = _amountOfTokens;

    // Withdraw all outstanding dividends first (including those generated from referrals).
    if(theDividendsOf(true, _customerAddress) > 0) withdrawFrom(_customerAddress);

    // Calculate how many back-end dividend tokens to transfer.
    // This amount is proportional to the caller's average dividend rate multiplied by the proportion of tokens being transferred.
    uint _amountOfDivTokens = _amountOfFrontEndTokens.mul(getUserAverageDividendRate(_customerAddress)).div(magnitude);

    if (_customerAddress != msg.sender){
      // Update the allowed balance.
      // Don't update this if we are transferring our own tokens (via transfer or buyAndTransfer)
      allowed[_customerAddress][msg.sender] -= _amountOfTokens;
    }

    // Exchange tokens
    frontTokenBalanceLedger_[_customerAddress]    = frontTokenBalanceLedger_[_customerAddress].sub(_amountOfFrontEndTokens);
    frontTokenBalanceLedger_[_toAddress]          = frontTokenBalanceLedger_[_toAddress].add(_amountOfFrontEndTokens);
    dividendTokenBalanceLedger_[_customerAddress] = dividendTokenBalanceLedger_[_customerAddress].sub(_amountOfDivTokens);
    dividendTokenBalanceLedger_[_toAddress]       = dividendTokenBalanceLedger_[_toAddress].add(_amountOfDivTokens);

    // Recipient inherits dividend percentage if they have not already selected one.
    if(!userSelectedRate[_toAddress])
    {
      userSelectedRate[_toAddress] = true;
      userDividendRate[_toAddress] = userDividendRate[_customerAddress];
    }

    // Update dividend trackers
    payoutsTo_[_customerAddress] -= (int256) (profitPerDivToken * _amountOfDivTokens);
    payoutsTo_[_toAddress]       += (int256) (profitPerDivToken * _amountOfDivTokens);

    uint length;

    assembly {
      length := extcodesize(_toAddress)
    }

    if (length > 0){
      // its a contract
      // note: at ethereum update ALL addresses are contracts
      ERC223Receiving receiver = ERC223Receiving(_toAddress);
      receiver.tokenFallback(_from, _amountOfTokens, _data);
    }

    // Fire logging event.
    emit Transfer(_customerAddress, _toAddress, _amountOfFrontEndTokens);
  }

  // Called from transferFrom. Always checks if _customerAddress has dividends.
  function withdrawFrom(address _customerAddress)
  internal
  {
    // Setup data
    uint _dividends                    = theDividendsOf(false, _customerAddress);

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

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

    _customerAddress.transfer(_dividends);

    // Fire logging event.
    emit onWithdraw(_customerAddress, _dividends);
  }


  /*=======================
   =    RESET FUNCTIONS   =
   ======================*/

  function injectEther()
  public
  payable
  onlyAdministrator
  {

  }

  /*=======================
   =   MATHS FUNCTIONS    =
   ======================*/

  function toPowerOfThreeHalves(uint x) public pure returns (uint) {
    // m = 3, n = 2
    // sqrt(x^3)
    return sqrt(x**3);
  }

  function toPowerOfTwoThirds(uint x) public pure returns (uint) {
    // m = 2, n = 3
    // cbrt(x^2)
    return cbrt(x**2);
  }

  function sqrt(uint x) public pure returns (uint y) {
    uint z = (x + 1) / 2;
    y = x;
    while (z < y) {
      y = z;
      z = (x / z + z) / 2;
    }
  }

  function cbrt(uint x) public pure returns (uint y) {
    uint z = (x + 1) / 3;
    y = x;
    while (z < y) {
      y = z;
      z = (x / (z*z) + 2 * z) / 3;
    }
  }
}

/*=======================
 =     INTERFACES       =
 ======================*/


contract ZethrDividendCards {
  function ownerOf(uint /*_divCardId*/) public pure returns (address) {}
  function receiveDividends(uint /*_divCardRate*/) public payable {}
}

contract ZethrBankroll{
  function receiveDividends() public payable {}
}


contract ERC223Receiving {
  function tokenFallback(address _from, uint _amountOfTokens, bytes _data) public returns (bool);
}

// Think it's safe to say y'all know what this is.

library SafeMath {

  function mul(uint a, uint b) internal pure returns (uint) {
    if (a == 0) {
      return 0;
    }
    uint c = a * b;
    assert(c / a == b);
    return c;
  }

  function div(uint a, uint b) internal pure returns (uint) {
    // assert(b > 0); // Solidity automatically throws when dividing by 0
    uint c = a / b;
    // assert(a == b * c + a % b); // There is no case in which this doesn't hold
    return c;
  }

  function sub(uint a, uint b) internal pure returns (uint) {
    assert(b <= a);
    return a - b;
  }

  function add(uint a, uint b) internal pure returns (uint) {
    uint c = a + b;
    assert(c >= a);
    return c;
  }
}

    Contract ABI  
[{"constant":true,"inputs":[{"name":"_customerAddress","type":"address"}],"name":"dividendsOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalEthereumICOReceived","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"spender","type":"address"},{"name":"tokens","type":"uint256"}],"name":"approve","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"icoHashedPass","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"referrerPercentage1","type":"uint256"},{"name":"referrerPercentage2","type":"uint256"},{"name":"referrerPercentage3","type":"uint256"},{"name":"bankrollPercentage","type":"uint256"}],"name":"setPercentage","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_ethereumToSpend","type":"uint256"}],"name":"calculateTokensReceived","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_amountOfTokens","type":"uint256"},{"name":"_data","type":"bytes"}],"name":"transferTo","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"currentEthInvested","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"regularPhase","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_tokensToSell","type":"uint256"}],"name":"calculateEthereumReceived","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_toAddress","type":"address"},{"name":"_amountOfTokens","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_referredBy","type":"address"},{"name":"target","type":"address"}],"name":"buyAndTransfer","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[],"name":"startRegularPhase","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_ethereumAmount","type":"uint256"}],"name":"ethereumToTokens_","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"publicStartRegularPhase","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"sellPrice","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_customerAddress","type":"address"}],"name":"getFrontEndTokenBalanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_customerAddress","type":"address"}],"name":"getDividendTokenBalanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_recipient","type":"address"}],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"stakingRequirement","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"address"}],"name":"allowed","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ethInvestedDuringICO","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"myDividendTokens","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_referredBy","type":"address"},{"name":"target","type":"address"},{"name":"_data","type":"bytes"},{"name":"divChoice","type":"uint8"}],"name":"buyAndTransfer","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"name":"x","type":"uint256"}],"name":"sqrt","outputs":[{"name":"y","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"name":"_includeReferralBonus","type":"bool"}],"name":"myDividends","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"icoPhase","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"injectEther","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"totalEthereumBalance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_referredBy","type":"address"},{"name":"_divChoice","type":"uint8"},{"name":"providedUnhashedPass","type":"string"}],"name":"buyAndSetDivPercentage","outputs":[{"name":"","type":"uint256"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_newCreator","type":"address"}],"name":"changeCreator","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"administrators","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getMyAverageDividendRate","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_amountOfTokens","type":"uint256"}],"name":"setStakingRequirement","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_newAdmin","type":"address"},{"name":"_status","type":"bool"}],"name":"setAdministrator","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getFrontEndTokenSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"x","type":"uint256"}],"name":"toPowerOfTwoThirds","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[],"name":"endICOPhase","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"myReferralDividends","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newOwner","type":"address"}],"name":"changeOwner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_newBankrollAddress","type":"address"}],"name":"changeBankroll","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_toAddress","type":"address"},{"name":"_amountOfTokens","type":"uint256"}],"name":"transfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_includeReferralBonus","type":"bool"},{"name":"_customerAddress","type":"address"}],"name":"theDividendsOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getMyDividendRate","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_symbol","type":"string"}],"name":"setSymbol","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"myFrontEndTokens","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_tokens","type":"uint256"}],"name":"tokensToEthereum_","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_name","type":"string"}],"name":"setName","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"dividendRate","type":"uint256"}],"name":"buyPrice","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"startICOPhase","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"tokensMintedDuringICO","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_amountOfTokens","type":"uint256"}],"name":"sell","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"exit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_referredBy","type":"address"}],"name":"buy","outputs":[{"name":"","type":"uint256"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_referredBy","type":"address"},{"name":"target","type":"address"},{"name":"_data","type":"bytes"}],"name":"buyAndTransfer","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"name":"x","type":"uint256"}],"name":"cbrt","outputs":[{"name":"y","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"name":"user","type":"address"}],"name":"getUserAverageDividendRate","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"reinvest","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"x","type":"uint256"}],"name":"toPowerOfThreeHalves","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"getDividendTokenSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_bankrollAddress","type":"address"},{"name":"_divCardAddress","type":"address"},{"name":"_creator","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"customerAddress","type":"address"},{"indexed":false,"name":"incomingEthereum","type":"uint256"},{"indexed":false,"name":"tokensMinted","type":"uint256"},{"indexed":true,"name":"referredBy","type":"address"}],"name":"onTokenPurchase","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"user","type":"address"},{"indexed":false,"name":"divRate","type":"uint256"}],"name":"UserDividendRate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"customerAddress","type":"address"},{"indexed":false,"name":"tokensBurned","type":"uint256"},{"indexed":false,"name":"ethereumEarned","type":"uint256"}],"name":"onTokenSell","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"customerAddress","type":"address"},{"indexed":false,"name":"ethereumReinvested","type":"uint256"},{"indexed":false,"name":"tokensMinted","type":"uint256"}],"name":"onReinvestment","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"customerAddress","type":"address"},{"indexed":false,"name":"ethereumWithdrawn","type":"uint256"}],"name":"onWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"tokens","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"tokenOwner","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"tokens","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"toBankRoll","type":"uint256"},{"indexed":false,"name":"toReferrer","type":"uint256"},{"indexed":false,"name":"toTokenHolders","type":"uint256"},{"indexed":false,"name":"toDivCardHolders","type":"uint256"},{"indexed":false,"name":"forTokens","type":"uint256"}],"name":"Allocation","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"referrer","type":"address"},{"indexed":false,"name":"amountReceived","type":"uint256"}],"name":"Referral","type":"event"}]

  Contract Creation Code Switch To Opcodes View
600f600055600760019081556002908155600355683635c9adc5dea0000060045560c0604052600960808190527f5a6574687247616d65000000000000000000000000000000000000000000000060a090815262000061916005919062000331565b506040805180820190915260048082527f5a544847000000000000000000000000000000000000000000000000000000006020909201918252620000a89160069162000331565b5060006016819055601755601b805460a060020a61ffff0219169055348015620000d157600080fd5b506040516060806200350f83398101604090815281516020808401519383015160078054600160a060020a03948516600160a060020a03199182161782556008805497861697821697909717909655601a805492851692871692909217808355601b8054881633178155908516600090815260198552868120805460ff19908116600190811790925583548816835288832080548216831790557f5d6016397a73f5e079297ac5a36fef17b4d9c3831618e63ab105738020ddd72080548216831790557f2cd9ebf6ff19cdd7ffcc447d7c7d47b5991f5c7392a04512134e765802361fa680548216831790557f9e6c92d7be355807bd948171438a5e65aaf9e4c36f1405c1b9ca25d27c4ea3a080548216831790557f977a47af6886c81cccba9ceb5316ec9b4027c59ac276de3e2cb39ec8af72ee7b80548216831790557f55664edbebd57273ba1f6d1c017cd920bbceea562d5502a6837280a660edef9580548216831790557f40f1108237696bbe60a17fe2a155c116be4dd3f1a51814bfd40efec622f2b4bc80548216831790557f32f57031be3980b83490b6329e2e3b7ce475446e73fbb98d0754c951129bba348054821683179055855488168352600d8088528984208054831684179055865489168452600e8089528a852080548416602190811790915586548b168652828a528b8620805485168617905586548b168652818a528b86208054851682179055975495548a168552601089528a85208054909c16958a1695909517909a5584548816835298865287822080548a16909117905591549094168152929091529190208054909216179055620003d6565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200037457805160ff1916838001178555620003a4565b82800160010185558215620003a4579182015b82811115620003a457825182559160200191906001019062000387565b50620003b2929150620003b6565b5090565b620003d391905b80821115620003b25760008155600101620003bd565b90565b61312980620003e66000396000f3006080604052600436106102ff5763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166265318b811461038b57806303d499ef146103be57806306fdde03146103d3578063095ea7b31461045d5780630c3c450e146104955780630ec0fce5146104aa57806310d0ffdd146104cd57806318160ddd146104e557806319fb361f146104fa5780631b1686b614610569578063214dda841461057e578063226093731461059357806323b872dd146105ab578063269a7c3f146105d557806327dffba6146105ef5780632a9121c714610604578063313ce5671461061c5780633c7d6f30146106475780634b7503341461065c5780634c146f3814610671578063513920411461069257806351cff8d9146106b357806356d399e8146106d45780635c658165146106e95780635ccb5460146107105780636135e08414610725578063627aa6d21461073a578063677342ce146107a1578063688abbf7146107b957806368955fb1146107d35780636a3a2119146107e85780636b2f4632146107f057806370a0823114610805578063724fcd4c1461082657806374580e2f1461088557806376be1585146108a65780637b89eef2146108c75780638328b610146108dc57806387c95058146108f457806395d89b411461091a57806396242f41146104e5578063965447d91461092f578063a3a06c5414610947578063a6d87f7d1461095c578063a6f9dae114610971578063a78bcf6e14610992578063a9059cbb146109b3578063b1f253f6146109d7578063b607068c146109fd578063b84c824614610a12578063bcaa218e14610a6b578063bf3b397b14610a80578063c47f002714610a98578063c4dbf62214610af1578063ccb5336514610b09578063d161b56a14610b1e578063e4849b3214610b33578063e9fad8ee14610b4b578063f088d54714610b60578063f2f8569f14610b74578063f42c56c214610bd6578063f8ead7cf14610bee578063fdb5a03e14610c0f578063fdc89f7314610c24578063ffcb1edb14610c3c575b601b5460009060a860020a900460ff16151561031a57600080fd5b50336000818152600d602052604090205460ff16156103445761033e346000610c51565b50610388565b610386600060146040805190810160405280600381526020017f30783000000000000000000000000000000000000000000000000000000000008152506113e7565b505b50005b34801561039757600080fd5b506103ac600160a060020a036004351661159d565b60408051918252519081900360200190f35b3480156103ca57600080fd5b506103ac6115d8565b3480156103df57600080fd5b506103e86115df565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561042257818101518382015260200161040a565b50505050905090810190601f16801561044f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561046957600080fd5b50610481600160a060020a036004351660243561166d565b604080519115158252519081900360200190f35b3480156104a157600080fd5b506103ac6116da565b3480156104b657600080fd5b506104cb6004356024356044356064356116fe565b005b3480156104d957600080fd5b506103ac600435611769565b3480156104f157600080fd5b506103ac6117c0565b34801561050657600080fd5b50604080516020601f6064356004818101359283018490048402850184019095528184526104cb94600160a060020a0381358116956024803590921695604435953695608494019181908401838280828437509497506117c69650505050505050565b34801561057557600080fd5b506103ac61188c565b34801561058a57600080fd5b50610481611892565b34801561059f57600080fd5b506103ac6004356118a2565b3480156105b757600080fd5b50610481600160a060020a036004358116906024351660443561190d565b6104cb600160a060020a0360043581169060243516611991565b3480156105fb57600080fd5b506104cb6119a5565b34801561061057600080fd5b506103ac6004356119eb565b34801561062857600080fd5b50610631611c60565b6040805160ff9092168252519081900360200190f35b34801561065357600080fd5b506104cb611c65565b34801561066857600080fd5b506103ac611cae565b34801561067d57600080fd5b506103ac600160a060020a0360043516611d58565b34801561069e57600080fd5b506103ac600160a060020a0360043516611d73565b3480156106bf57600080fd5b506104cb600160a060020a0360043516611d8e565b3480156106e057600080fd5b506103ac611e91565b3480156106f557600080fd5b506103ac600160a060020a0360043581169060243516611e97565b34801561071c57600080fd5b506103ac611eb4565b34801561073157600080fd5b506103ac611eba565b604080516020600460443581810135601f81018490048402850184019095528484526104cb948235600160a060020a03908116956024803590921695369594606494929301919081908401838280828437509497505050923560ff169350611ecd92505050565b3480156107ad57600080fd5b506103ac600435611fa6565b3480156107c557600080fd5b506103ac6004351515611fe1565b3480156107df57600080fd5b50610481612022565b6104cb612032565b3480156107fc57600080fd5b506103ac612053565b34801561081157600080fd5b506103ac600160a060020a0360043516612058565b604080516020600460443581810135601f81018490048402850184019095528484526103ac948235600160a060020a0316946024803560ff16953695946064949201919081908401838280828437509497506113e79650505050505050565b34801561089157600080fd5b506104cb600160a060020a0360043516612069565b3480156108b257600080fd5b50610481600160a060020a036004351661210b565b3480156108d357600080fd5b506103ac612120565b3480156108e857600080fd5b506104cb600435612130565b34801561090057600080fd5b506104cb600160a060020a0360043516602435151561216a565b34801561092657600080fd5b506103e86121b4565b34801561093b57600080fd5b506103ac60043561220f565b34801561095357600080fd5b506104cb61221d565b34801561096857600080fd5b506103ac61225c565b34801561097d57600080fd5b506104cb600160a060020a0360043516612278565b34801561099e57600080fd5b506104cb600160a060020a0360043516612319565b3480156109bf57600080fd5b50610481600160a060020a0360043516602435612367565b3480156109e357600080fd5b506103ac6004351515600160a060020a03602435166123c4565b348015610a0957600080fd5b506106316123f6565b348015610a1e57600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526104cb9436949293602493928401919081908401838280828437509497506124379650505050505050565b348015610a7757600080fd5b506103ac612468565b348015610a8c57600080fd5b506103ac600435612474565b348015610aa457600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526104cb94369492936024939284019190819084018382808284375094975061263b9650505050505050565b348015610afd57600080fd5b506103ac60043561266c565b348015610b1557600080fd5b506104cb6126f8565b348015610b2a57600080fd5b506103ac61274e565b348015610b3f57600080fd5b506104cb600435612754565b348015610b5757600080fd5b506104cb6129a4565b6103ac600160a060020a03600435166129f1565b604080516020600460443581810135601f81018490048402850184019095528484526104cb948235600160a060020a0390811695602480359092169536959460649492930191908190840183828082843750949750612a3e9650505050505050565b348015610be257600080fd5b506103ac600435612a4b565b348015610bfa57600080fd5b506103ac600160a060020a0360043516612a85565b348015610c1b57600080fd5b506104cb612ac6565b348015610c3057600080fd5b506103ac600435612b94565b348015610c4857600080fd5b506103ac612ba2565b600080600080600080600080600080600080655af3107a40008e101580610c825750600754600160a060020a031633145b1515610d1557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f547269656420746f206275792062656c6f7720746865206d696e20657468206260448201527f7579696e207468726573686f6c642e0000000000000000000000000000000000606482015290519081900360840190fd5b601b548e945060a860020a900460ff1615610d7757610d3b84606463ffffffff612ba816565b9750610d5260035489612bbf90919063ffffffff16565b9a50610d748b610d68868b63ffffffff612bea16565b9063ffffffff612bea16565b93505b336000908152600e602052604090205460ff169150610dad6064610da1868563ffffffff612bbf16565b9063ffffffff612ba816565b9650610dbf848863ffffffff612bea16565b601b5490945060a060020a900460ff168015610de55750600754600160a060020a031633145b15610def57928601925b610df8846119eb565b9550610e0a868363ffffffff612bbf16565b601654909550610e20908763ffffffff612bfc16565b601655601754610e36908663ffffffff612bfc16565b6017556015805485019055601b5460a060020a900460ff1615610f3a57600754969a508a96600160a060020a0316331415610e705760009a505b60148054850190819055601380548801905560009a508a9950680d8d726b7177a800001015610e9e57600080fd5b32331480610eb65750600754600160a060020a031633145b1515610ec157600080fd5b3360009081526012602052604090208054850190819055670de0b6b3a7640000101580610ef85750600754600160a060020a031633145b1515610f0357600080fd5b680d8d726b7177a800006014541415610f3557601b805474ff0000000000000000000000000000000000000000191690555b6111f8565b601a54600160a060020a0316331461116b5733600090815260106020526040902054600160a060020a03161515610fd757600160a060020a038d161580610f895750600160a060020a038d1633145b15610f9d57601b54600160a060020a03169c505b336000908152601060205260409020805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a038f16179055610ff3565b33600090815260106020526040902054600160a060020a03169c505b600454600160a060020a038e166000908152600960205260409020541080156110275750601b54600160a060020a03163314155b1561103b57601b54600160a060020a03169c505b6110556064610da16000548a612bbf90919063ffffffff16565b8a0199506110736064610da16000548a612bbf90919063ffffffff16565b600160a060020a039d8e166000908152600f602090815260408083208054909401909355601090522054909c169b8c1561116b576110c16064610da16001548a612bbf90919063ffffffff16565b8a0199506110df6064610da16001548a612bbf90919063ffffffff16565b600160a060020a039d8e166000908152600f602090815260408083208054909401909355601090522054909c169b8c1561116b5761112d6064610da16002548a612bbf90919063ffffffff16565b8a01995061114b6064610da16002548a612bbf90919063ffffffff16565b600160a060020a038e166000908152600f60205260409020805490910190555b61117b878b63ffffffff612bea16565b601754909950680100000000000000008a0293508381151561119957fe5b0485028303830392506111d66111c7601754610da1680100000000000000008d612bbf90919063ffffffff16565b6018549063ffffffff612bfc16565b6018819055336000908152601160205260409020805491870285900390910190555b33600090815260096020526040902054611218908763ffffffff612bfc16565b33600090815260096020908152604080832093909355600a90522054611244908663ffffffff612bfc16565b336000908152600a60205260409020558a156112e057600760009054906101000a9004600160a060020a0316600160a060020a03166379fc46878c6040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016000604051808303818588803b1580156112c657600080fd5b505af11580156112da573d6000803e3d6000fd5b50505050505b601b5460a860020a900460ff161561137357600854604080517ff2c7d331000000000000000000000000000000000000000000000000000000008152600481018590529051600160a060020a039092169163f2c7d331918b91602480830192600092919082900301818588803b15801561135957600080fd5b505af115801561136d573d6000803e3d6000fd5b50505050505b604080518c8152602081018c90528082018b9052606081018a90526080810186905290517f7dcbb47dfce2f719d7e1984fd3345bbf7923b236005b64931d95b9205100de829181900360a00190a1508989018801870183018d900380156113d657fe5b505050505050505050505092915050565b6000806000601b60149054906101000a900460ff16806114105750601b5460a860020a900460ff165b151561141b57600080fd5b601b5460a060020a900460ff16156114fd57836040518082805190602001908083835b6020831061145d5780518252601f19909201916020918201910161143e565b5181516020939093036101000a600019018019909116921691909117905260405192018290039091209450507f0bc01e2c48062bbd576f26d72d8ceffdacd379582fb42d3d0eff647b3f52d370841491508190506114c55750600754600160a060020a031633145b15156114d057600080fd5b503a640ba43b740081118015906114f25750680d8d726b7177a8000060145411155b15156114fd57600080fd5b60ff8086166000908152600c602052604090205416151561151d57600080fd5b336000818152600d60209081526040808320805460ff19908116600117909155600e835292819020805460ff8b1694168417905580519384529083019190915280517fc95fc9f67beb97905ada724494d1acfcaa30a3c96b432a0eac1824899f9f97c29281900390910190a16115933487610c51565b5050509392505050565b600160a060020a0316600090815260116020908152604080832054600a90925290912054601854680100000000000000009102919091030490565b6014545b90565b6005805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156116655780601f1061163a57610100808354040283529160200191611665565b820191906000526020600020905b81548152906001019060200180831161164857829003601f168201915b505050505081565b336000818152600b60209081526040808320600160a060020a03871680855290835281842086905581518681529151939493909284927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929081900390910190a3600191505b5092915050565b7f0bc01e2c48062bbd576f26d72d8ceffdacd379582fb42d3d0eff647b3f52d37081565b3360008181526019602052604090205460ff16151561171c57600080fd5b600085101561172a57600080fd5b600084101561173857600080fd5b600083101561174657600080fd5b600082101561175457600080fd5b50600093909355600191909155600255600355565b336000908152600e602052604081205481908190819061179a90606490610da190889060ff1663ffffffff612bbf16565b92506117ac858463ffffffff612bea16565b91506117b7826119eb565b95945050505050565b60165490565b600160a060020a0384163314611842576402540be40082101580156118035750600160a060020a0384166000908152600960205260409020548211155b80156118325750600160a060020a0384166000908152600b602090815260408083203384529091529020548211155b151561183d57600080fd5b61187a565b6402540be400821015801561186f5750600160a060020a0384166000908152600960205260409020548211155b151561187a57600080fd5b61188684848484612c0b565b50505050565b60155481565b601b5460a860020a900460ff1681565b600080600080600060165486111515156118bb57600080fd5b6118c486612474565b93506118cf33612a85565b92506118f168010000000000000000610da1606481888863ffffffff612bbf16565b9150611903848363ffffffff612bea16565b9695505050505050565b60008360606402540be400841080159061193f5750600160a060020a0382166000908152600960205260409020548411155b801561196e5750600160a060020a0382166000908152600b602090815260408083203384529091529020548411155b151561197957600080fd5b61198586868684612c0b565b50600195945050505050565b60606119a08383836014611ecd565b505050565b3360008181526019602052604090205460ff1615156119c357600080fd5b50601b805475ffff0000000000000000000000000000000000000000191660a860020a179055565b6000808080808080808080655af3107a40008b11611a9057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f547269656420746f2062757920746f6b656e73207769746820746f6f206c697460448201527f746c65206574682e000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b601b5460a060020a900460ff1615611aca57611ab98b660251e66909d00063ffffffff612ba816565b670de0b6b3a7640000029950611c52565b60145460155460009a508a995010611ae4578a9750611b5a565b601454601554108015611afd57506014548b6015540111155b15611b0a578a9850611b5a565b601454601554108015611b2257506014548b60155401115b15611b5557601554601454611b3c9163ffffffff612bea16565b9850611b4e8b8a63ffffffff612bea16565b9750611b5a565b600080fd5b8888018b14611b6557fe5b600096508695508815611b9857611b95660251e66909d000610da18b670de0b6b3a764000063ffffffff612bbf16565b96505b8715611c405788611bd96003610da16002611bcd611bc861258f620f424002601654612ba890919063ffffffff16565b612b94565b9063ffffffff612bbf16565b0194508785019350611c0561258f611bcd611c006002610da18a600363ffffffff612bbf16565b61220f565b9250611c2661258f611bcd611c006002610da189600363ffffffff612bbf16565b9150611c38828463ffffffff612bea16565b620f42400295505b5085850160008111611c4e57fe5b8099505b505050505050505050919050565b601281565b601c54621275000142118015611c7c5750601c5415155b1515611c8757600080fd5b601b805475ffff0000000000000000000000000000000000000000191660a860020a179055565b600080600080601b60149054906101000a900460ff1680611cd25750601454601554105b15611ce657660251e66909d0009250611d15565b611cf666038d7ea4c680006119eb565b9150816d314dc6448d9338c15b0a00000000811515611d1157fe5b0492505b611d50611d4368010000000000000000610da16064610da1611d3633612a85565b899063ffffffff612bbf16565b849063ffffffff612bea16565b949350505050565b600160a060020a031660009081526009602052604090205490565b600160a060020a03166000908152600a602052604090205490565b6000806000611d9d6001611fe1565b11611da757600080fd5b601b5460a860020a900460ff161515611dbf57600080fd5b339150611dcc6000611fe1565b600160a060020a0380841660009081526011602090815260408083208054680100000000000000008702019055600f90915281208054919055909101915083161515611e16573392505b604051600160a060020a0384169082156108fc029083906000818181858888f19350505050158015611e4c573d6000803e3d6000fd5b50604080518281529051600160a060020a038516917fccad973dcd043c7d680389db4378bd6b9775db7124092e9e0422c9e46d7985dc919081900360200190a2505050565b60045481565b600b60209081526000928352604080842090915290825290205481565b60145481565b600033611ec681611d73565b91505b5090565b6000806000601b60159054906101000a900460ff161515611eed57600080fd5b33600081815260096020908152604080832054600d90925290912054919450925060ff168015611f1e575060ff8416155b15611f3357611f2d3488610c51565b50611f75565b611f7387856040805190810160405280600381526020017f30783000000000000000000000000000000000000000000000000000000000008152506113e7565b505b33600090815260096020526040902054611f8f9083612bea565b9050611f9d338783886117c6565b50505050505050565b80600260018201045b81811015611fdb578091506002818285811515611fc857fe5b0401811515611fd357fe5b049050611faf565b50919050565b60003382611ff757611ff28161159d565b61201b565b600160a060020a0381166000908152600f60205260409020546120198261159d565b015b9392505050565b601b5460a060020a900460ff1681565b3360008181526019602052604090205460ff16151561205057600080fd5b50565b303190565b600061206382611d58565b92915050565b3360008181526019602052604090205460ff16151561208757600080fd5b50601a8054600160a060020a0392831673ffffffffffffffffffffffffffffffffffffffff199182161780835583166000908152600d60209081526040808320805460ff19908116600117909155855487168452600e8352818420805490911660211790559354601b54861683526010909152929020805490911691909216179055565b60196020526000908152604090205460ff1681565b600061212b33612a85565b905090565b3360008181526019602052604090205460ff16151561214e57600080fd5b68056bc75e2d6310000082101561216457600080fd5b50600455565b3360008181526019602052604090205460ff16151561218857600080fd5b50600160a060020a03919091166000908152601960205260409020805460ff1916911515919091179055565b6006805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156116655780601f1061163a57610100808354040283529160200191611665565b60006120636002830a612a4b565b3360008181526019602052604090205460ff16151561223b57600080fd5b50601b805474ff000000000000000000000000000000000000000019169055565b60006122686000611fe1565b6122726001611fe1565b03905090565b3360008181526019602052604090205460ff16151561229657600080fd5b50601b8054600160a060020a0392831673ffffffffffffffffffffffffffffffffffffffff199182161780835583166000908152600d60209081526040808320805460ff19908116600117909155855487168452600e835281842080549091166021179055601a5494548616835260109091529020805490911691909216179055565b3360008181526019602052604090205460ff16151561233757600080fd5b506007805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600060606000612375612468565b1161237f57600080fd5b6402540be40083101580156123a35750336000908152600960205260409020548311155b15156123ae57600080fd5b6123ba33858584612c0b565b5060019392505050565b6000826123d457611ff28261159d565b600160a060020a0382166000908152600f60205260409020546120198361159d565b336000818152600d602052604081205490919060ff16151561241757600080fd5b600160a060020a03166000908152600e602052604090205460ff16919050565b3360008181526019602052604090205460ff16151561245557600080fd5b81516119a090600690602085019061306f565b600033611ec681611d58565b600080808080808080655af3107a40008910156124f257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f547269656420746f2073656c6c20746f6f2066657720746f6b656e732e000000604482015290519081900360640190fd5b601354601654600098508897501161250c57889650612579565b6013546016541180156125255750601354896016540310155b1561253257889550612579565b60135460165411801561254a57506013548960165403105b15611b55576013546016546125649163ffffffff612bea16565b9550612576898763ffffffff612bea16565b96505b858701891461258457fe5b86156125b0576125ad670de0b6b3a7640000610da189660251e66909d00063ffffffff612bbf16565b94505b8515612621576125df6003610da16002611bcd611bc861258f620f424002601654612ba890919063ffffffff16565b925061260c6003610da16002611bcd611bc861258f620f4240028c60165403612ba890919063ffffffff16565b915061261e838363ffffffff612bea16565b93505b508284016000811161262f57fe5b98975050505050505050565b3360008181526019602052604090205460ff16151561265957600080fd5b81516119a090600590602085019061306f565b600080600080601b60149054906101000a900460ff16806126905750601454601554105b156126a457660251e66909d00092506126d3565b6126b466038d7ea4c680006119eb565b9150816d314dc6448d9338c15b0a000000008115156126cf57fe5b0492505b6117b7836126ec6064610da1838a63ffffffff612bbf16565b9063ffffffff612bfc16565b3360008181526019602052604090205460ff16151561271657600080fd5b601c541561272357600080fd5b50601b805474ff0000000000000000000000000000000000000000191660a060020a17905542601c55565b60135481565b600080600080600080600080612768612468565b1161277257600080fd5b601b5460a060020a900460ff161561278957600080fd5b601b5460a860020a900460ff1615156127a157600080fd5b336000908152600960205260409020548811156127bd57600080fd5b8796506127c933612a85565b95506802000000000000000086108015906127ed5750683200000000000000008611155b15156127f857600080fd5b61281568010000000000000000610da1898963ffffffff612bbf16565b945061282087612474565b9350601554841115612836576000601555612840565b6015805485900390555b61285e68010000000000000000610da16064610da1611d3633612a85565b9250612870848463ffffffff612bea16565b601654909250612886908863ffffffff612bea16565b60165560175461289c908663ffffffff612bea16565b601755336000908152600960205260409020546128bf908863ffffffff612bea16565b33600090815260096020908152604080832093909355600a905220546128eb908663ffffffff612bea16565b336000908152600a6020908152604080832093909355601854601190915291812080549288026801000000000000000086020192839003905560175491925010156129605761295c60175468010000000000000000850281151561294b57fe5b60185491900463ffffffff612bfc16565b6018555b6040805188815260208101849052815133927fc4823739c5787d2ca17e404aa47d5569ae71dfb49cbf21b3f6152ed238a31139928290030190a25050505050505050565b601b54600090819060a860020a900460ff1615156129c157600080fd5b505033600081815260096020526040812054908111156129e4576129e481612754565b6129ed82611d8e565b5050565b601b54600090819060a860020a900460ff161515612a0e57600080fd5b50336000818152600d602052604090205460ff161515612a2d57600080fd5b612a373484610c51565b5050919050565b6119a08383836014611ecd565b80600360018201045b81811015611fdb5780915060038160020282830285811515612a7257fe5b0401811515612a7d57fe5b049050612a54565b600160a060020a038116600090815260096020908152604080832054600a90925282205461206391680100000000000000009091029063ffffffff612ba816565b600080600080612ad66001611fe1565b11612ae057600080fd5b601b5460a860020a900460ff161515612af857600080fd5b612b026000611fe1565b3360008181526011602090815260408083208054680100000000000000008702019055600f909152812080549082905590920194509250612b44908490610c51565b905081600160a060020a03167fbe339fc14b041c2b0e0f3dd2cd325d0c3668b78378001e53160eab36153264588483604051808381526020018281526020019250505060405180910390a2505050565b60006120636003830a611fa6565b60175490565b6000808284811515612bb657fe5b04949350505050565b600080831515612bd257600091506116d3565b50828202828482811515612be257fe5b041461201b57fe5b600082821115612bf657fe5b50900390565b60008282018381101561201b57fe5b6000806000806000601b60159054906101000a900460ff161515612c2e57600080fd5b600160a060020a0388161515612c4357600080fd5b8894508693506000612c566001876123c4565b1115612c6557612c6585612fb5565b612c8b68010000000000000000610da1612c7e88612a85565b879063ffffffff612bbf16565b9250600160a060020a0385163314612cc857600160a060020a0385166000908152600b602090815260408083203384529091529020805488900390555b600160a060020a038516600090815260096020526040902054612cf1908563ffffffff612bea16565b600160a060020a0380871660009081526009602052604080822093909355908a1681522054612d26908563ffffffff612bfc16565b600160a060020a03808a166000908152600960209081526040808320949094559188168152600a9091522054612d62908463ffffffff612bea16565b600160a060020a038087166000908152600a602052604080822093909355908a1681522054612d97908463ffffffff612bfc16565b600160a060020a0389166000908152600a6020908152604080832093909355600d9052205460ff161515612e1157600160a060020a038089166000818152600d60209081526040808320805460ff19908116600117909155948a168352600e909152808220549282529020805490921660ff919091161790555b60188054600160a060020a0387811660009081526011602052604080822080549489029094039093559254908b16835290822080549186029091019055883b9250821115612f5f57506040517fc0ee0b8a000000000000000000000000000000000000000000000000000000008152600160a060020a0389811660048301908152602483018990526060604484019081528851606485015288518b949385169363c0ee0b8a938e938d938d9360840190602085019080838360005b83811015612ee4578181015183820152602001612ecc565b50505050905090810190601f168015612f115780820380516001836020036101000a031916815260200191505b50945050505050602060405180830381600087803b158015612f3257600080fd5b505af1158015612f46573d6000803e3d6000fd5b505050506040513d6020811015612f5c57600080fd5b50505b87600160a060020a031685600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a3505050505050505050565b6000612fc26000836123c4565b600160a060020a03831660008181526011602090815260408083208054680100000000000000008702019055600f909152808220805490839055905193019350909183156108fc0291849190818181858888f1935050505015801561302b573d6000803e3d6000fd5b50604080518281529051600160a060020a038416917fccad973dcd043c7d680389db4378bd6b9775db7124092e9e0422c9e46d7985dc919081900360200190a25050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106130b057805160ff19168380011785556130dd565b828001600101855582156130dd579182015b828111156130dd5782518255916020019190600101906130c2565b50611ec9926115dc9250905b80821115611ec957600081556001016130e95600a165627a7a723058207f5dc00462244fa2d149720f2b7bd54d3edba24a594266cc6b23a77f3ed303ac00290000000000000000000000008481ff17c388ac87c5fa390e5c745677c6d99552000000000000000000000000d532375971258953263218994966e2a0a3d5c18a00000000000000000000000008ff848949eac9209c8a997c5432d4fb273b5ce9

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

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000008481ff17c388ac87c5fa390e5c745677c6d99552
Arg [1] : 000000000000000000000000d532375971258953263218994966e2a0a3d5c18a
Arg [2] : 00000000000000000000000008ff848949eac9209c8a997c5432d4fb273b5ce9


   Swarm Source:
bzzr://7f5dc00462244fa2d149720f2b7bd54d3edba24a594266cc6b23a77f3ed303ac

 

View All
Block Age transaction Difficulty GasUsed Reward
View All
Block Age UncleNumber Difficulty GasUsed Reward
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.