Contract Overview
Balance: 1,681.170713612992827765 Ether
Ether Value: $343,244.62 (@ $204.17/ETH)
Transactions: 42338 txns
Token Tracker: ZethrGame (ZTHG)
 Latest 25 txns From a total of 42338 Transactions
(+1 PendingTxn)

TxHash Age From To Value [TxFee]
0xd9ac64828492e4f5dd7b8df1af8b2b5b316879f8069c6aea715f69381dab2785(pending)0xa66a4d3b13e1d02d826a68ab444f1d780247cbb0  IN  0xb9ab8eed48852de901c13543042204c6c569b8110 Ether(Pending)
0xfaf505335e348dab36d974e82ae980fc79401951f4da7e00bdc23a87b2b813cc1 hr 20 mins ago0x40a535b11b7788f28f30ce6cf5ca0e2daf625897  IN   0xb9ab8eed48852de901c13543042204c6c569b8110 Ether0.002508444
0x55ab41c9ba2854f0b20df8f74c076bca99d75345381cf4c94dd78e579e5483091 hr 23 mins ago0x40a535b11b7788f28f30ce6cf5ca0e2daf625897  IN   0xb9ab8eed48852de901c13543042204c6c569b8110 Ether0.001463259
0xcf9ea7dadf0bb9eeb4ed44401e3b8d8944807dfd0e41b4299ede6d8bab7e3a641 hr 24 mins ago0x40a535b11b7788f28f30ce6cf5ca0e2daf625897  IN   0xb9ab8eed48852de901c13543042204c6c569b8110 Ether0.001057301
0xec2bc27ec8823d0b62842c306fa462d7d6c2c5f96d5265a3522b9f8e0c850dbf1 hr 30 mins ago0x40a535b11b7788f28f30ce6cf5ca0e2daf625897  IN   0xb9ab8eed48852de901c13543042204c6c569b8110 Ether0.001463259
0xbe175724ba1bac8c2a2a3faa6b53fe4f12c5b8d3e4c6e1501a7ce1e7b791c0b11 hr 34 mins ago0x40a535b11b7788f28f30ce6cf5ca0e2daf625897  IN   0xb9ab8eed48852de901c13543042204c6c569b8110 Ether0.0019858515
0x04a6b6748b8a5f3061b92ff35bf7b2ad83cd226cc7ee9cff291a08a2cb7cfc511 hr 35 mins ago0x40a535b11b7788f28f30ce6cf5ca0e2daf625897  IN   0xb9ab8eed48852de901c13543042204c6c569b8110 Ether0.0019858515
0xfe3ab7ef123aec580b5f53cd9e979312b45eecf08f25874223c4ab6c1da0b5f01 hr 36 mins ago0x40a535b11b7788f28f30ce6cf5ca0e2daf625897  IN   0xb9ab8eed48852de901c13543042204c6c569b8110 Ether0.0019858515
0xb78bb0d546daa25036c7120623405a1375946eca99fc8281a5aebb8933c1ff661 hr 38 mins ago0x40a535b11b7788f28f30ce6cf5ca0e2daf625897  IN   0xb9ab8eed48852de901c13543042204c6c569b8110 Ether0.002508444
0x490c1ddc1d80af2a263ed2f6b220c9a9e106fb9ce5cf38901acd0154d81a1c201 hr 39 mins ago0x40a535b11b7788f28f30ce6cf5ca0e2daf625897  IN   0xb9ab8eed48852de901c13543042204c6c569b8110 Ether0.002508444
0xbe7bcc91627a48962e3aee212b5731b98b0eadf2ddcb930b58db6da2866ebba02 hrs 22 mins ago0x40a535b11b7788f28f30ce6cf5ca0e2daf625897  IN   0xb9ab8eed48852de901c13543042204c6c569b8110 Ether0.001463259
0x5846d3edb33c75e444712abed43c209f2c0d7084957231a6249671dba87d8d562 hrs 25 mins ago0x40a535b11b7788f28f30ce6cf5ca0e2daf625897  IN   0xb9ab8eed48852de901c13543042204c6c569b8110 Ether0.001463259
0x916c0925e8df01d040a2621dbbb463bc431048b3a086ce70912719c302560dee2 hrs 27 mins ago0x40a535b11b7788f28f30ce6cf5ca0e2daf625897  IN   0xb9ab8eed48852de901c13543042204c6c569b8110 Ether0.001254222
0x3a69517330b9be7fa362cf7d51cc735281d1e8f795983dd8318cc53cf523a32f2 hrs 30 mins ago0x40a535b11b7788f28f30ce6cf5ca0e2daf625897  IN   0xb9ab8eed48852de901c13543042204c6c569b8110 Ether0.001463259
0xf1379775b48c3b74144badd1182ff299d38256dfac60831abfcc1cfaaa972b722 hrs 36 mins ago0x40a535b11b7788f28f30ce6cf5ca0e2daf625897  IN   0xb9ab8eed48852de901c13543042204c6c569b8110 Ether0.0013587405
0x46a52ccc6267c8714c0de5b6d293014193d8f15625a3d477b73a372372bd32562 hrs 42 mins ago0x40a535b11b7788f28f30ce6cf5ca0e2daf625897  IN   0xb9ab8eed48852de901c13543042204c6c569b8110 Ether0.001045185
0xd139f1a7dc6cda771643ff4e6089e8da0a10a978682267f119fa6af68192edef2 hrs 45 mins ago0x40a535b11b7788f28f30ce6cf5ca0e2daf625897  IN   0xb9ab8eed48852de901c13543042204c6c569b8110 Ether0.000807136031
0xf32fc176d4e777c4672990e490bbc1ec3a439b5100f27a282c370b7d0db8f0292 hrs 45 mins ago0x2083ec92a752a67d4ed8e9eefc9491b191d99b8e  IN   0xb9ab8eed48852de901c13543042204c6c569b8110 Ether0.001461201
0x613391d777961210edf4e07ba4cf32220032ef3c83c4ec7407580c1e650a67642 hrs 46 mins ago0x40a535b11b7788f28f30ce6cf5ca0e2daf625897  IN   0xb9ab8eed48852de901c13543042204c6c569b8110 Ether0.001672296
0x6fb3ffc73d09881863ceb38286064a81a15da6d591ec72364f1f308e345995762 hrs 46 mins ago0x2083ec92a752a67d4ed8e9eefc9491b191d99b8e  IN   0xb9ab8eed48852de901c13543042204c6c569b8110 Ether0.001669944
0x448c52297f61d0b2a1154eca59dd50b44695a549e1262b39ca397fd98ae31bdd2 hrs 48 mins ago0x2083ec92a752a67d4ed8e9eefc9491b191d99b8e  IN   0xb9ab8eed48852de901c13543042204c6c569b8110 Ether0.001461201
0x789668606d2f66e90ce40639682acb472cf9ce2ff960914b6bb8080479d023722 hrs 48 mins ago0x40a535b11b7788f28f30ce6cf5ca0e2daf625897  IN   0xb9ab8eed48852de901c13543042204c6c569b8110 Ether0.001254222
0x6d2c82901841fadf19c5c132bfaa7bd746e341eb65ad6b786c875fa2b50139132 hrs 49 mins ago0x2083ec92a752a67d4ed8e9eefc9491b191d99b8e  IN   0xb9ab8eed48852de901c13543042204c6c569b8110 Ether0.001252458
0xf89d9e018f553865850bfa6fdf2cc70c13e959b86a5e1e8b7bc820fca2e984eb2 hrs 52 mins ago0x2083ec92a752a67d4ed8e9eefc9491b191d99b8e  IN   0xb9ab8eed48852de901c13543042204c6c569b8110 Ether0.001056048
0xbaa2080f3756aa2945d70857a8f0d1d7cb30f90e6d5f57d591e8cb1a8d874b142 hrs 53 mins ago0x40a535b11b7788f28f30ce6cf5ca0e2daf625897  IN   0xb9ab8eed48852de901c13543042204c6c569b8110 Ether0.001463259
[ 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
0x1cda1902f30d53376a807e8b91eda224a9aa7c26a5c840f881e819790b2e477265719772 hrs 59 mins ago0xb9ab8eed48852de901c13543042204c6c569b8110x11cf382f50d64beb137f53310c686722f640d6ce3.695466268808904968 Ether
0x40bb9eafacd56e7f20ecdea5b39f9f60c2db63b75a29779137febd4dd49780a465719063 hrs 15 mins ago0xb9ab8eed48852de901c13543042204c6c569b8110x2083ec92a752a67d4ed8e9eefc9491b191d99b8e0.054635443880961381 Ether
0x575b8ca297688b49d54c204b44a613ff7e546fb32dcef557fbc2d0196ac1fd4d65717373 hrs 58 mins ago0xb9ab8eed48852de901c13543042204c6c569b8110x5dbf2caab592923339c4cb44a07f90d23c6c1a490.004516110636906744 Ether
0x0ee5a0b50caf47ca0febc0f57b4936daeed9c490d6103bf0660a06a5d43d84df65717284 hrs ago0xb9ab8eed48852de901c13543042204c6c569b8110x40a535b11b7788f28f30ce6cf5ca0e2daf6258970.000854882431419845 Ether
0xdbc61523ca80761543a8432808bec22024f6cbe5087548c54da89d93c3e2986165716834 hrs 10 mins ago0xb9ab8eed48852de901c13543042204c6c569b8110x24caa2913daa82126090a472a0708a42028500030.064801096416897571 Ether
0xfa7e45b80905821e80d226292b3ffc554b3b146e1d5867ec2f4d1c57cf9ef5eb65716744 hrs 12 mins ago0xb9ab8eed48852de901c13543042204c6c569b8110xa66a4d3b13e1d02d826a68ab444f1d780247cbb00.036089588376156857 Ether
0xbdb5591745faa2ab7a291d2a18ea15902ba62420c3239bbd49ea6f0cee7dcdac65714325 hrs 15 mins ago0xb9ab8eed48852de901c13543042204c6c569b8110x7db01b4210254d7431d3858a1a49ae21e2f111510.005256293433228529 Ether
0xc0ed20c4afa35dc6acfd8cb959bd3632e9f4904c2dcdc00336fa4e37e370849465714185 hrs 18 mins ago0xb9ab8eed48852de901c13543042204c6c569b8110x1beafa2e7e507eb73d61847bdbe95374d1fa0c4f0.000022581195194746 Ether
0x2f96b77f173c580e31d6701511246e8385bbc5e2151736a0aa5e36beb33268ca65714145 hrs 19 mins ago0xb9ab8eed48852de901c13543042204c6c569b8110xd532375971258953263218994966e2a0a3d5c18a0.003 Ether
0x2f96b77f173c580e31d6701511246e8385bbc5e2151736a0aa5e36beb33268ca65714145 hrs 19 mins ago0xb9ab8eed48852de901c13543042204c6c569b8110x8481ff17c388ac87c5fa390e5c745677c6d995520.006 Ether
0x4128bfd6c4d38ed8077ed50dd42f09598dd3fbd2e314657583f56a68c549cf06657007210 hrs 25 mins ago0xb9ab8eed48852de901c13543042204c6c569b8110x16a886a744e2f0956acca4fd58532fbae56d189e0.032241532187661135 Ether
0xd0517e2c7b209b95193861fcf8337d7151bde445545d3694e4e1eba4d8696fc8656966812 hrs 2 mins ago0xb9ab8eed48852de901c13543042204c6c569b8110xb14e9fec6f06708d96e5a121a1ef747d83e35c301.546518656821233422 Ether
0x4c543a0bb306c067c95c73a461fece5457025632b56385c929918ba78d171da1656947612 hrs 47 mins ago0xb9ab8eed48852de901c13543042204c6c569b8110xd9a1030a2875399672ce0daf6c590d25190199116.452849946868330092 Ether
0x9141617b9f83ece6a59251ea345a01fcece79a14ba7cd03c56705b9840a81b51656911914 hrs 13 mins ago0xb9ab8eed48852de901c13543042204c6c569b8110x24caa2913daa82126090a472a0708a42028500030.000874732135278168 Ether
0x05f1f7e134816ae8cce3a5746325da1ac5a08d6b3455691a6f2324c5d7952152656910314 hrs 16 mins ago0xb9ab8eed48852de901c13543042204c6c569b8110xa66a4d3b13e1d02d826a68ab444f1d780247cbb00.09220547213853453 Ether
0x9684ce00d4945ff75eb16f153db5aded120691151c6d19e1d3a3ed8501998866656905514 hrs 29 mins ago0xb9ab8eed48852de901c13543042204c6c569b8110x5dbf2caab592923339c4cb44a07f90d23c6c1a490.000005424015202529 Ether
0x30ec0ef5c1f1a901128aa2eb15fb64e2979b51e1aa86e82ae78bb07cb35aa54c656902014 hrs 35 mins ago0xb9ab8eed48852de901c13543042204c6c569b8110x7db01b4210254d7431d3858a1a49ae21e2f111510.000006522098796119 Ether
0x42b4d946ec83f07ce476df6cdcb04b6f55b337ac17c48ccfa715ce2fe438ae62656901514 hrs 37 mins ago0xb9ab8eed48852de901c13543042204c6c569b8110x1beafa2e7e507eb73d61847bdbe95374d1fa0c4f0.000000044683155783 Ether
0xe944945f44180bc8ed0164c8348d521a5a49c02868dda41c4e78d1a7bf1626f1656901214 hrs 38 mins ago0xb9ab8eed48852de901c13543042204c6c569b8110xd532375971258953263218994966e2a0a3d5c18a0.003 Ether
0xe944945f44180bc8ed0164c8348d521a5a49c02868dda41c4e78d1a7bf1626f1656901214 hrs 38 mins ago0xb9ab8eed48852de901c13543042204c6c569b8110x8481ff17c388ac87c5fa390e5c745677c6d995520.006 Ether
0xf0c1206d3843c16134b4db4f58a2c11275918cb420fb4a345a9de8d3d957f58a656879615 hrs 31 mins ago0xb9ab8eed48852de901c13543042204c6c569b8110x5dbf2caab592923339c4cb44a07f90d23c6c1a490.000048297133981653 Ether
0xa080095333b1f8bbea034870353656df382ed92159e2ea1a924a8a2231932b9c656878715 hrs 34 mins ago0xb9ab8eed48852de901c13543042204c6c569b8110x7db01b4210254d7431d3858a1a49ae21e2f111510.000065160573829258 Ether
0x825b1860662488fdfb16fd9a2f33bcd6ed742841876ceebe3587290637ccbdd3656877515 hrs 37 mins ago0xb9ab8eed48852de901c13543042204c6c569b8110x1beafa2e7e507eb73d61847bdbe95374d1fa0c4f0.000006055465285946 Ether
0x6ebdfba74c42a82753bb2f0049bb26c8d7b62ac657e20f6de38cb4017bb6cec4656877215 hrs 37 mins ago0xb9ab8eed48852de901c13543042204c6c569b8110xd532375971258953263218994966e2a0a3d5c18a0.03 Ether
0x6ebdfba74c42a82753bb2f0049bb26c8d7b62ac657e20f6de38cb4017bb6cec4656877215 hrs 37 mins ago0xb9ab8eed48852de901c13543042204c6c569b8110x8481ff17c388ac87c5fa390e5c745677c6d995520.06 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.