ETH Price: $3,425.62 (+0.07%)
Gas: 6 Gwei

Token

DAN-Service coin (DANS)
 

Overview

Max Total Supply

100,000,000 DANS

Holders

1,388

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 4 Decimals)

Balance
141 DANS

Value
$0.00
0xea34fd7e3b335498b7c8ad9fdc833a46dd78b193
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

DAN is an exchange of advertisements based on blockchain technology, it is a revolution of offline and online advertising in general.

ICO Information

Project Sector : Advertising  
ICO Start Date : Jul 01, 2018
ICO End Date : Aug 30, 2018
Hard Cap : 40,000 ETH
ICO Price  : $0.60 | 0.001 ETH
Bonus : Up to 30%
Country : Germany

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
DANSToken

Compiler Version
v0.4.11+commit.68ef5810

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2018-06-08
*/

pragma solidity ^0.4.11;



/**
 * Math operations with safety checks
 */
library SafeMath {
  function mul(uint a, uint b) internal returns (uint) {
    uint c = a * b;
    assert(a == 0 || c / a == b);
    return c;
  }

  function div(uint a, uint b) internal returns (uint) {
    // assert(b > 0); // Solidity automatically revert()s 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 returns (uint) {
    assert(b <= a);
    return a - b;
  }

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

  function max64(uint64 a, uint64 b) internal constant returns (uint64) {
    return a >= b ? a : b;
  }

  function min64(uint64 a, uint64 b) internal constant returns (uint64) {
    return a < b ? a : b;
  }

  function max256(uint256 a, uint256 b) internal constant returns (uint256) {
    return a >= b ? a : b;
  }

  function min256(uint256 a, uint256 b) internal constant returns (uint256) {
    return a < b ? a : b;
  }

}


/**
 * @title ERC20Basic
 * @dev Simpler version of ERC20 interface
 * @dev see https://github.com/ethereum/EIPs/issues/20
 */
contract ERC20Basic {
  uint public totalSupply;
  function balanceOf(address who) constant returns (uint);
  function transfer(address to, uint value);
  event Transfer(address indexed from, address indexed to, uint value);
}




/**
 * @title Basic token
 * @dev Basic version of StandardToken, with no allowances. 
 */
contract BasicToken is ERC20Basic {
  using SafeMath for uint;

  mapping(address => uint) balances;

  /**
   * @dev Fix for the ERC20 short address attack.
   */
  modifier onlyPayloadSize(uint size) {
     if(msg.data.length < size + 4) {
       revert();
     }
     _;
  }

  /**
  * @dev transfer token for a specified address
  * @param _to The address to transfer to.
  * @param _value The amount to be transferred.
  */
  function transfer(address _to, uint _value) onlyPayloadSize(2 * 32) {
    balances[msg.sender] = balances[msg.sender].sub(_value);
    balances[_to] = balances[_to].add(_value);
    Transfer(msg.sender, _to, _value);
  }

  /**
  * @dev Gets the balance of the specified address.
  * @param _owner The address to query the the balance of. 
  * @return An uint representing the amount owned by the passed address.
  */
  function balanceOf(address _owner) constant returns (uint balance) {
    return balances[_owner];
  }

}




/**
 * @title ERC20 interface
 * @dev see https://github.com/ethereum/EIPs/issues/20
 */
contract ERC20 is ERC20Basic {
  function allowance(address owner, address spender) constant returns (uint);
  function transferFrom(address from, address to, uint value);
  function approve(address spender, uint value);
  event Approval(address indexed owner, address indexed spender, uint value);
}




/**
 * @title Standard ERC20 token
 *
 * @dev Implemantation of the basic standart token.
 * @dev https://github.com/ethereum/EIPs/issues/20
 * @dev Based on code by FirstBlood: https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol
 */
contract StandardToken is BasicToken, ERC20 {

  mapping (address => mapping (address => uint)) allowed;


  /**
   * @dev Transfer tokens from one address to another
   * @param _from address The address which you want to send tokens from
   * @param _to address The address which you want to transfer to
   * @param _value uint the amout of tokens to be transfered
   */
  function transferFrom(address _from, address _to, uint _value) onlyPayloadSize(3 * 32) {
    var _allowance = allowed[_from][msg.sender];

    // Check is not needed because sub(_allowance, _value) will already throw if this condition is not met
    // if (_value > _allowance) revert();

    balances[_to] = balances[_to].add(_value);
    balances[_from] = balances[_from].sub(_value);
    allowed[_from][msg.sender] = _allowance.sub(_value);
    Transfer(_from, _to, _value);
  }

  /**
   * @dev Aprove the passed address to spend the specified amount of tokens on beahlf of msg.sender.
   * @param _spender The address which will spend the funds.
   * @param _value The amount of tokens to be spent.
   */
  function approve(address _spender, uint _value) {

    // To change the approve amount you first have to reduce the addresses`
    //  allowance to zero by calling `approve(_spender, 0)` if it is not
    //  already 0 to mitigate the race condition described here:
    //  https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
    if ((_value != 0) && (allowed[msg.sender][_spender] != 0)) revert();

    allowed[msg.sender][_spender] = _value;
    Approval(msg.sender, _spender, _value);
  }

  /**
   * @dev Function to check the amount of tokens than an owner allowed to a spender.
   * @param _owner address The address which owns the funds.
   * @param _spender address The address which will spend the funds.
   * @return A uint specifing the amount of tokens still avaible for the spender.
   */
  function allowance(address _owner, address _spender) constant returns (uint remaining) {
    return allowed[_owner][_spender];
  }

}


/**
 * @title LimitedTransferToken
 * @dev LimitedTransferToken defines the generic interface and the implementation to limit token 
 * transferability for different events. It is intended to be used as a base class for other token 
 * contracts. 
 * LimitedTransferToken has been designed to allow for different limiting factors,
 * this can be achieved by recursively calling super.transferableTokens() until the base class is 
 * hit. For example:
 *     function transferableTokens(address holder, uint64 time) constant public returns (uint256) {
 *       return min256(unlockedTokens, super.transferableTokens(holder, time));
 *     }
 * A working example is VestedToken.sol:
 * https://github.com/OpenZeppelin/zeppelin-solidity/blob/master/contracts/token/VestedToken.sol
 */

contract LimitedTransferToken is ERC20 {

  /**
   * @dev Checks whether it can transfer or otherwise throws.
   */
  modifier canTransfer(address _sender, uint _value) {
   if (_value > transferableTokens(_sender, uint64(now))) revert();
   _;
  }

  /**
   * @dev Checks modifier and allows transfer if tokens are not locked.
   * @param _to The address that will recieve the tokens.
   * @param _value The amount of tokens to be transferred.
   */
  function transfer(address _to, uint _value) canTransfer(msg.sender, _value) {
    super.transfer(_to, _value);
  }

  /**
  * @dev Checks modifier and allows transfer if tokens are not locked.
  * @param _from The address that will send the tokens.
  * @param _to The address that will recieve the tokens.
  * @param _value The amount of tokens to be transferred.
  */
  function transferFrom(address _from, address _to, uint _value) canTransfer(_from, _value) {
    super.transferFrom(_from, _to, _value);
  }

  /**
   * @dev Default transferable tokens function returns all tokens for a holder (no limit).
   * @dev Overwriting transferableTokens(address holder, uint64 time) is the way to provide the 
   * specific logic for limiting token transferability for a holder over time.
   */
  function transferableTokens(address holder, uint64 time) constant public returns (uint256) {
    time;
    return balanceOf(holder);
  }
}


/**
 * @title Vested token
 * @dev Tokens that can be vested for a group of addresses.
 */
contract VestedToken is StandardToken, LimitedTransferToken {

  uint256 MAX_GRANTS_PER_ADDRESS = 20;

  struct TokenGrant {
    address granter;     // 20 bytes
    uint256 value;       // 32 bytes
    uint64 cliff;
    uint64 vesting;
    uint64 start;        // 3 * 8 = 24 bytes
    bool revokable;
    bool burnsOnRevoke;  // 2 * 1 = 2 bits? or 2 bytes?
  } // total 78 bytes = 3 sstore per operation (32 per sstore)

  mapping (address => TokenGrant[]) public grants;

  event NewTokenGrant(address indexed from, address indexed to, uint256 value, uint256 grantId);

  /**
   * @dev Grant tokens to a specified address
   * @param _to address The address which the tokens will be granted to.
   * @param _value uint256 The amount of tokens to be granted.
   * @param _start uint64 Time of the beginning of the grant.
   * @param _cliff uint64 Time of the cliff period.
   * @param _vesting uint64 The vesting period.
   */
  function grantVestedTokens(
    address _to,
    uint256 _value,
    uint64 _start,
    uint64 _cliff,
    uint64 _vesting,
    bool _revokable,
    bool _burnsOnRevoke
  ) public {

    // Check for date inconsistencies that may cause unexpected behavior
    if (_cliff < _start || _vesting < _cliff) {
      revert();
    }

    if (tokenGrantsCount(_to) > MAX_GRANTS_PER_ADDRESS) revert();   // To prevent a user being spammed and have his balance locked (out of gas attack when calculating vesting).

    uint count = grants[_to].push(
                TokenGrant(
                  _revokable ? msg.sender : 0, // avoid storing an extra 20 bytes when it is non-revokable
                  _value,
                  _cliff,
                  _vesting,
                  _start,
                  _revokable,
                  _burnsOnRevoke
                )
              );

    transfer(_to, _value);

    NewTokenGrant(msg.sender, _to, _value, count - 1);
  }

  /**
   * @dev Revoke the grant of tokens of a specifed address.
   * @param _holder The address which will have its tokens revoked.
   * @param _grantId The id of the token grant.
   */
  function revokeTokenGrant(address _holder, uint _grantId) public {
    TokenGrant storage grant = grants[_holder][_grantId];

    if (!grant.revokable) { // Check if grant was revokable
      revert();
    }

    if (grant.granter != msg.sender) { // Only granter can revoke it
      revert();
    }

    address receiver = grant.burnsOnRevoke ? 0xdead : msg.sender;

    uint256 nonVested = nonVestedTokens(grant, uint64(now));

    // remove grant from array
    delete grants[_holder][_grantId];
    grants[_holder][_grantId] = grants[_holder][grants[_holder].length.sub(1)];
    grants[_holder].length -= 1;

    balances[receiver] = balances[receiver].add(nonVested);
    balances[_holder] = balances[_holder].sub(nonVested);

    Transfer(_holder, receiver, nonVested);
  }


  /**
   * @dev Calculate the total amount of transferable tokens of a holder at a given time
   * @param holder address The address of the holder
   * @param time uint64 The specific time.
   * @return An uint representing a holder's total amount of transferable tokens.
   */
  function transferableTokens(address holder, uint64 time) constant public returns (uint256) {
    uint256 grantIndex = tokenGrantsCount(holder);

    if (grantIndex == 0) return balanceOf(holder); // shortcut for holder without grants

    // Iterate through all the grants the holder has, and add all non-vested tokens
    uint256 nonVested = 0;
    for (uint256 i = 0; i < grantIndex; i++) {
      nonVested = SafeMath.add(nonVested, nonVestedTokens(grants[holder][i], time));
    }

    // Balance - totalNonVested is the amount of tokens a holder can transfer at any given time
    uint256 vestedTransferable = SafeMath.sub(balanceOf(holder), nonVested);

    // Return the minimum of how many vested can transfer and other value
    // in case there are other limiting transferability factors (default is balanceOf)
    return SafeMath.min256(vestedTransferable, super.transferableTokens(holder, time));
  }

  /**
   * @dev Check the amount of grants that an address has.
   * @param _holder The holder of the grants.
   * @return A uint representing the total amount of grants.
   */
  function tokenGrantsCount(address _holder) constant returns (uint index) {
    return grants[_holder].length;
  }

  /**
   * @dev Calculate amount of vested tokens at a specifc time.
   * @param tokens uint256 The amount of tokens grantted.
   * @param time uint64 The time to be checked
   * @param start uint64 A time representing the begining of the grant
   * @param cliff uint64 The cliff period.
   * @param vesting uint64 The vesting period.
   * @return An uint representing the amount of vested tokensof a specif grant.
   *  transferableTokens
   *   |                         _/--------   vestedTokens rect
   *   |                       _/
   *   |                     _/
   *   |                   _/
   *   |                 _/
   *   |                /
   *   |              .|
   *   |            .  |
   *   |          .    |
   *   |        .      |
   *   |      .        |
   *   |    .          |
   *   +===+===========+---------+----------> time
   *      Start       Clift    Vesting
   */
  function calculateVestedTokens(
    uint256 tokens,
    uint256 time,
    uint256 start,
    uint256 cliff,
    uint256 vesting) constant returns (uint256)
    {
      // Shortcuts for before cliff and after vesting cases.
      if (time < cliff) return 0;
      if (time >= vesting) return tokens;

      // Interpolate all vested tokens.
      // As before cliff the shortcut returns 0, we can use just calculate a value
      // in the vesting rect (as shown in above's figure)

      // vestedTokens = tokens * (time - start) / (vesting - start)
      uint256 vestedTokens = SafeMath.div(
                                    SafeMath.mul(
                                      tokens,
                                      SafeMath.sub(time, start)
                                      ),
                                    SafeMath.sub(vesting, start)
                                    );

      return vestedTokens;
  }

  /**
   * @dev Get all information about a specifc grant.
   * @param _holder The address which will have its tokens revoked.
   * @param _grantId The id of the token grant.
   * @return Returns all the values that represent a TokenGrant(address, value, start, cliff,
   * revokability, burnsOnRevoke, and vesting) plus the vested value at the current time.
   */
  function tokenGrant(address _holder, uint _grantId) constant returns (address granter, uint256 value, uint256 vested, uint64 start, uint64 cliff, uint64 vesting, bool revokable, bool burnsOnRevoke) {
    TokenGrant storage grant = grants[_holder][_grantId];

    granter = grant.granter;
    value = grant.value;
    start = grant.start;
    cliff = grant.cliff;
    vesting = grant.vesting;
    revokable = grant.revokable;
    burnsOnRevoke = grant.burnsOnRevoke;

    vested = vestedTokens(grant, uint64(now));
  }

  /**
   * @dev Get the amount of vested tokens at a specific time.
   * @param grant TokenGrant The grant to be checked.
   * @param time The time to be checked
   * @return An uint representing the amount of vested tokens of a specific grant at a specific time.
   */
  function vestedTokens(TokenGrant grant, uint64 time) private constant returns (uint256) {
    return calculateVestedTokens(
      grant.value,
      uint256(time),
      uint256(grant.start),
      uint256(grant.cliff),
      uint256(grant.vesting)
    );
  }

  /**
   * @dev Calculate the amount of non vested tokens at a specific time.
   * @param grant TokenGrant The grant to be checked.
   * @param time uint64 The time to be checked
   * @return An uint representing the amount of non vested tokens of a specifc grant on the 
   * passed time frame.
   */
  function nonVestedTokens(TokenGrant grant, uint64 time) private constant returns (uint256) {
    return grant.value.sub(vestedTokens(grant, time));
  }

  /**
   * @dev Calculate the date when the holder can trasfer all its tokens
   * @param holder address The address of the holder
   * @return An uint representing the date of the last transferable tokens.
   */
  function lastTokenIsTransferableDate(address holder) constant public returns (uint64 date) {
    date = uint64(now);
    uint256 grantIndex = grants[holder].length;
    for (uint256 i = 0; i < grantIndex; i++) {
      date = SafeMath.max64(grants[holder][i].vesting, date);
    }
  }
}

// QUESTIONS FOR AUDITORS:
// - Considering we inherit from VestedToken, how much does that hit at our gas price?
// - Ensure max supply is 100,000,000
// - Ensure that even if not totalSupply is sold, tokens would still be transferrable after (we will up to totalSupply by creating DAN-Service tokens)

// vesting: 365 days, 365 days / 4 vesting


contract DANSToken is VestedToken {
  //FIELDS
  string public name = "DAN-Service coin";
  string public symbol = "DANS";
  uint public decimals = 4;
  
  //CONSTANTS
  //Time limits
  uint public constant CROWDSALE_DURATION = 60 days;
  uint public constant STAGE_ONE_TIME_END = 24 hours; // first day bonus
  uint public constant STAGE_TWO_TIME_END = 1 weeks; // first week bonus
  uint public constant STAGE_THREE_TIME_END = CROWDSALE_DURATION;
  
  // Multiplier for the decimals
  uint private constant DECIMALS = 10000;

  //Prices of DANS
  uint public constant PRICE_STANDARD    = 900*DECIMALS; // DANS received per one ETH; MAX_SUPPLY / (valuation / ethPrice)
  uint public constant PRICE_STAGE_ONE   = PRICE_STANDARD * 130/100; // 1ETH = 30% more DANS
  uint public constant PRICE_STAGE_TWO   = PRICE_STANDARD * 115/100; // 1ETH = 15% more DANS
  uint public constant PRICE_STAGE_THREE = PRICE_STANDARD;

  //DANS Token Limits
  uint public constant ALLOC_TEAM =         16000000*DECIMALS; // team + advisors
  uint public constant ALLOC_BOUNTIES =      4000000*DECIMALS;
  uint public constant ALLOC_CROWDSALE =    80000000*DECIMALS;
  uint public constant PREBUY_PORTION_MAX = 20000000*DECIMALS; // this is redundantly more than what will be pre-sold
 
  // More erc20
  uint public totalSupply = 100000000*DECIMALS; 
  
  //ASSIGNED IN INITIALIZATION
  //Start and end times
  uint public publicStartTime; // Time in seconds public crowd fund starts.
  uint public privateStartTime; // Time in seconds when pre-buy can purchase up to 31250 ETH worth of DANS;
  uint public publicEndTime; // Time in seconds crowdsale ends
  uint public hardcapInEth;

  //Special Addresses
  address public multisigAddress; // Address to which all ether flows.
  address public danserviceTeamAddress; // Address to which ALLOC_TEAM, ALLOC_BOUNTIES, ALLOC_WINGS is (ultimately) sent to.
  address public ownerAddress; // Address of the contract owner. Can halt the crowdsale.
  address public preBuy1; // Address used by pre-buy
  address public preBuy2; // Address used by pre-buy
  address public preBuy3; // Address used by pre-buy
  uint public preBuyPrice1; // price for pre-buy
  uint public preBuyPrice2; // price for pre-buy
  uint public preBuyPrice3; // price for pre-buy

  //Running totals
  uint public etherRaised; // Total Ether raised.
  uint public DANSSold; // Total DANS created
  uint public prebuyPortionTotal; // Total of Tokens purchased by pre-buy. Not to exceed PREBUY_PORTION_MAX.
  
  //booleans
  bool public halted; // halts the crowd sale if true.

  // MODIFIERS
  //Is currently in the period after the private start time and before the public start time.
  modifier is_pre_crowdfund_period() {
    if (now >= publicStartTime || now < privateStartTime) revert();
    _;
  }

  //Is currently the crowdfund period
  modifier is_crowdfund_period() {
    if (now < publicStartTime) revert();
    if (isCrowdfundCompleted()) revert();
    _;
  }

  // Is completed
  modifier is_crowdfund_completed() {
    if (!isCrowdfundCompleted()) revert();
    _;
  }
  function isCrowdfundCompleted() internal returns (bool) {
    if (now > publicEndTime || DANSSold >= ALLOC_CROWDSALE || etherRaised >= hardcapInEth) return true;
    return false;
  }

  //May only be called by the owner address
  modifier only_owner() {
    if (msg.sender != ownerAddress) revert();
    _;
  }

  //May only be called if the crowdfund has not been halted
  modifier is_not_halted() {
    if (halted) revert();
    _;
  }

  // EVENTS
  event PreBuy(uint _amount);
  event Buy(address indexed _recipient, uint _amount);

  // Initialization contract assigns address of crowdfund contract and end time.
  function DANSToken (
    address _multisig,
    address _danserviceTeam,
    uint _publicStartTime,
    uint _privateStartTime,
    uint _hardcapInEth,
    address _prebuy1, uint _preBuyPrice1,
    address _prebuy2, uint _preBuyPrice2,
    address _prebuy3, uint _preBuyPrice3
  )
    public
  {
    ownerAddress = msg.sender;
    publicStartTime = _publicStartTime;
    privateStartTime = _privateStartTime;
	publicEndTime = _publicStartTime + CROWDSALE_DURATION;
    multisigAddress = _multisig;
    danserviceTeamAddress = _danserviceTeam;

    hardcapInEth = _hardcapInEth;

    preBuy1 = _prebuy1;
    preBuyPrice1 = _preBuyPrice1;
    preBuy2 = _prebuy2;
    preBuyPrice2 = _preBuyPrice2;
    preBuy3 = _prebuy3;
    preBuyPrice3 = _preBuyPrice3;

    balances[danserviceTeamAddress] += ALLOC_BOUNTIES;

    balances[ownerAddress] += ALLOC_TEAM;

    balances[ownerAddress] += ALLOC_CROWDSALE;
  }

  // Transfer amount of tokens from sender account to recipient.
  // Only callable after the crowd fund is completed
  function transfer(address _to, uint _value)
  {
    if (_to == msg.sender) return; // no-op, allow even during crowdsale, in order to work around using grantVestedTokens() while in crowdsale
    if (!isCrowdfundCompleted()) revert();
    super.transfer(_to, _value);
  }

  // Transfer amount of tokens from a specified address to a recipient.
  // Transfer amount of tokens from sender account to recipient.
  function transferFrom(address _from, address _to, uint _value)
    is_crowdfund_completed
  {
    super.transferFrom(_from, _to, _value);
  }

  //constant function returns the current DANS price.
  function getPriceRate()
      constant
      returns (uint o_rate)
  {
      uint delta = SafeMath.sub(now, publicStartTime);

      if (delta > STAGE_TWO_TIME_END) return PRICE_STAGE_THREE;
      if (delta > STAGE_ONE_TIME_END) return PRICE_STAGE_TWO;

      return (PRICE_STAGE_ONE);
  }

  // calculates wmount of DANS we get, given the wei and the rates we've defined per 1 eth
  function calcAmount(uint _wei, uint _rate) 
    constant
    returns (uint) 
  {
    return SafeMath.div(SafeMath.mul(_wei, _rate), 1 ether);
  } 
  
  // Given the rate of a purchase and the remaining tokens in this tranche, it
  // will throw if the sale would take it past the limit of the tranche.
  // Returns `amount` in scope as the number of DANS tokens that it will purchase.
  function processPurchase(uint _rate, uint _remaining)
    internal
    returns (uint o_amount)
  {
    o_amount = calcAmount(msg.value, _rate);

    if (o_amount > _remaining) revert();
    if (!multisigAddress.send(msg.value)) revert();

    balances[ownerAddress] = balances[ownerAddress].sub(o_amount);
    balances[msg.sender] = balances[msg.sender].add(o_amount);

    DANSSold += o_amount;
    etherRaised += msg.value;
  }

  //Special Function can only be called by pre-buy and only during the pre-crowdsale period.
  function preBuy()
    payable
    is_pre_crowdfund_period
    is_not_halted
  {
    // Pre-buy participants would get the first-day price, as well as a bonus of vested tokens
    uint priceVested = 0;

    if (msg.sender == preBuy1) priceVested = preBuyPrice1;
    if (msg.sender == preBuy2) priceVested = preBuyPrice2;
    if (msg.sender == preBuy3) priceVested = preBuyPrice3;

    if (priceVested == 0) revert();

    uint amount = processPurchase(PRICE_STAGE_ONE + priceVested, SafeMath.sub(PREBUY_PORTION_MAX, prebuyPortionTotal));
    grantVestedTokens(msg.sender, calcAmount(msg.value, priceVested), 
      uint64(now), uint64(now) + 91 days, uint64(now) + 365 days, 
      false, false
    );
    prebuyPortionTotal += amount;
    PreBuy(amount);
  }

  //Default function called by sending Ether to this address with no arguments.
  //Results in creation of new DANS Tokens if transaction would not exceed hard limit of DANS Token.
  function()
    payable
    is_crowdfund_period
    is_not_halted
  {
    uint amount = processPurchase(getPriceRate(), SafeMath.sub(ALLOC_CROWDSALE, DANSSold));
    Buy(msg.sender, amount);
  }

  // To be called at the end of crowdfund period
  // WARNING: transfer(), which is called by grantVestedTokens(), wants a minimum message length
  function grantVested(address _danserviceTeamAddress, address _danserviceFundAddress)
    is_crowdfund_completed
    only_owner
    is_not_halted
  {
    // Grant tokens pre-allocated for the team
    grantVestedTokens(
      _danserviceTeamAddress, ALLOC_TEAM,
      uint64(now), uint64(now) + 91 days , uint64(now) + 365 days, 
      false, false
    );

    // Grant tokens that remain after crowdsale to the DAN-Service coin fund, vested for 2 years
    grantVestedTokens(
      _danserviceFundAddress, balances[ownerAddress],
      uint64(now), uint64(now) + 182 days , uint64(now) + 730 days, 
      false, false
    );
  }

  //May be used by owner of contract to halt crowdsale and no longer except ether.
  function toggleHalt(bool _halted)
    only_owner
  {
    halted = _halted;
  }

  //failsafe drain
  function drain()
    only_owner
  {
    if (!ownerAddress.send(address(this).balance)) revert();
  }
}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[],"name":"PREBUY_PORTION_MAX","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_holder","type":"address"}],"name":"tokenGrantsCount","outputs":[{"name":"index","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"PRICE_STAGE_TWO","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"}],"name":"approve","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"preBuy3","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"preBuy1","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"publicEndTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"uint256"}],"name":"grants","outputs":[{"name":"granter","type":"address"},{"name":"value","type":"uint256"},{"name":"cliff","type":"uint64"},{"name":"vesting","type":"uint64"},{"name":"start","type":"uint64"},{"name":"revokable","type":"bool"},{"name":"burnsOnRevoke","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"preBuy2","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"multisigAddress","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"ALLOC_BOUNTIES","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"publicStartTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_holder","type":"address"},{"name":"_grantId","type":"uint256"}],"name":"tokenGrant","outputs":[{"name":"granter","type":"address"},{"name":"value","type":"uint256"},{"name":"vested","type":"uint256"},{"name":"start","type":"uint64"},{"name":"cliff","type":"uint64"},{"name":"vesting","type":"uint64"},{"name":"revokable","type":"bool"},{"name":"burnsOnRevoke","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"STAGE_TWO_TIME_END","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"holder","type":"address"}],"name":"lastTokenIsTransferableDate","outputs":[{"name":"date","type":"uint64"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"STAGE_ONE_TIME_END","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"balance","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_wei","type":"uint256"},{"name":"_rate","type":"uint256"}],"name":"calcAmount","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"ALLOC_CROWDSALE","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"getPriceRate","outputs":[{"name":"o_rate","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"privateStartTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_halted","type":"bool"}],"name":"toggleHalt","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"ownerAddress","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"PRICE_STAGE_ONE","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"},{"name":"_start","type":"uint64"},{"name":"_cliff","type":"uint64"},{"name":"_vesting","type":"uint64"},{"name":"_revokable","type":"bool"},{"name":"_burnsOnRevoke","type":"bool"}],"name":"grantVestedTokens","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"drain","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"prebuyPortionTotal","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"hardcapInEth","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"CROWDSALE_DURATION","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"ALLOC_TEAM","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"halted","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"danserviceTeamAddress","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"etherRaised","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"holder","type":"address"},{"name":"time","type":"uint64"}],"name":"transferableTokens","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"preBuyPrice1","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"preBuyPrice2","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_spender","type":"address"}],"name":"allowance","outputs":[{"name":"remaining","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"tokens","type":"uint256"},{"name":"time","type":"uint256"},{"name":"start","type":"uint256"},{"name":"cliff","type":"uint256"},{"name":"vesting","type":"uint256"}],"name":"calculateVestedTokens","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"PRICE_STAGE_THREE","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_danserviceTeamAddress","type":"address"},{"name":"_danserviceFundAddress","type":"address"}],"name":"grantVested","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_holder","type":"address"},{"name":"_grantId","type":"uint256"}],"name":"revokeTokenGrant","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"preBuyPrice3","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"PRICE_STANDARD","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"STAGE_THREE_TIME_END","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"preBuy","outputs":[],"payable":true,"type":"function"},{"constant":true,"inputs":[],"name":"DANSSold","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"inputs":[{"name":"_multisig","type":"address"},{"name":"_danserviceTeam","type":"address"},{"name":"_publicStartTime","type":"uint256"},{"name":"_privateStartTime","type":"uint256"},{"name":"_hardcapInEth","type":"uint256"},{"name":"_prebuy1","type":"address"},{"name":"_preBuyPrice1","type":"uint256"},{"name":"_prebuy2","type":"address"},{"name":"_preBuyPrice2","type":"uint256"},{"name":"_prebuy3","type":"address"},{"name":"_preBuyPrice3","type":"uint256"}],"payable":false,"type":"constructor"},{"payable":true,"type":"fallback"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_amount","type":"uint256"}],"name":"PreBuy","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_recipient","type":"address"},{"indexed":false,"name":"_amount","type":"uint256"}],"name":"Buy","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"},{"indexed":false,"name":"grantId","type":"uint256"}],"name":"NewTokenGrant","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Transfer","type":"event"}]

601460035560a0604052601060608190527f44414e2d5365727669636520636f696e000000000000000000000000000000006080908152620000459160059190620001df565b506040805180820190915260048082527f44414e530000000000000000000000000000000000000000000000000000000060209092019182526200008c91600691620001df565b50600460075564e8d4a510006008553415620000a457fe5b604051610160806200265683398101604090815281516020830151918301516060840151608085015160a086015160c087015160e08801516101008901516101208a0151610140909a0151979996979596949593949293919290915b600f8054600160a060020a031990811633600160a060020a0390811691909117835560098c9055600a8b9055624f1a008c01600b55600d805483168f8316179055600e805483168e83161790819055600c8b90556010805484168b8416179055601389905560118054841689841617905560148790556012805490931686831617909255601584905590811660009081526001602052604080822080546409502f90000190558354831682528082208054642540be40000190559254909116815220805464ba43b740000190555b505050505050505050505062000289565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200022257805160ff191683800117855562000252565b8280016001018555821562000252579182015b828111156200025257825182559160200191906001019062000235565b5b506200026192915062000265565b5090565b6200028691905b808211156200026157600081556001016200026c565b5090565b90565b6123bd80620002996000396000f3006060604052361561026f5763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663028118a1811461031657806302a72a4c14610338578063031f22e71461036657806306fdde0314610388578063095ea7b3146104185780630fdfa5ee1461043957806318160ddd1461046557806323b872dd1461048757806327c1f423146104ae5780632c27e581146104da5780632c71e60a146104fc578063313ce5671461056d578063529865c91461058f5780635462870d146105bb57806354ecd994146105e75780635fd1bbc414610609578063600e85b71461062b5780636698baaa146106a55780636c182e99146106c75780636f2590771461070057806370a08231146107225780637133c0c0146107505780637717403b146107785780638a4b08d91461079a5780638a7c63c5146107bc5780638c346690146107de5780638f84aa09146107f55780638fd712ae1461082157806395d89b41146108435780639754a4d9146108d35780639890220b146109175780639b914973146109295780639d61e6241461094b578063a9059cbb1461096d578063ad3c0b9d1461098e578063b475a1c8146109b0578063b9b8af0b146109d2578063c3650a21146109f6578063cd72ab6914610a22578063d347c20514610a44578063d719213e14610a7f578063dbc65f8514610aa1578063dd62ed3e14610ac3578063df3c211b14610af7578063e02f8d3314610b28578063e877715814610b4a578063eb944e4c14610b6e578063eed04e6914610b8f578063efe7926814610b28578063f514f0f91461098e578063f590aacc14610bf5578063f86b5ebc14610bff575b6103145b60006009544210156102855760006000fd5b61028d610c21565b156102985760006000fd5b60195460ff16156102a95760006000fd5b6102cd6102b4610c5e565b6102c86127106304c4b40002601754610cb1565b610cc8565b604080518281529051919250600160a060020a033316917fe3d4187f6ca4248660cc0ac8b8056515bac4a8132be2eca31d6d0cc170722a7e9181900360200190a25b5b5b50565b005b341561031e57fe5b610326610dac565b60408051918252519081900360200190f35b341561034057fe5b610326600160a060020a0360043516610db5565b60408051918252519081900360200190f35b341561036e57fe5b610326610dd4565b60408051918252519081900360200190f35b341561039057fe5b610398610de0565b6040805160208082528351818301528351919283929083019185019080838382156103de575b8051825260208311156103de57601f1990920191602091820191016103be565b505050905090810190601f16801561040a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561042057fe5b610314600160a060020a0360043516602435610e6e565b005b341561044157fe5b610449610f0e565b60408051600160a060020a039092168252519081900360200190f35b341561046d57fe5b610326610f1d565b60408051918252519081900360200190f35b341561048f57fe5b610314600160a060020a0360043581169060243516604435610f23565b005b34156104b657fe5b610449610f49565b60408051600160a060020a039092168252519081900360200190f35b34156104e257fe5b610326610f58565b60408051918252519081900360200190f35b341561050457fe5b61051b600160a060020a0360043516602435610f5e565b60408051600160a060020a039098168852602088019690965267ffffffffffffffff9485168787015292841660608701529216608085015290151560a0840152151560c0830152519081900360e00190f35b341561057557fe5b610326610fe4565b60408051918252519081900360200190f35b341561059757fe5b610449610fea565b60408051600160a060020a039092168252519081900360200190f35b34156105c357fe5b610449610ff9565b60408051600160a060020a039092168252519081900360200190f35b34156105ef57fe5b610326611008565b60408051918252519081900360200190f35b341561061157fe5b610326611011565b60408051918252519081900360200190f35b341561063357fe5b61064a600160a060020a0360043516602435611017565b60408051600160a060020a03909916895260208901979097528787019590955267ffffffffffffffff9384166060880152918316608087015290911660a0850152151560c0840152151560e083015251908190036101000190f35b34156106ad57fe5b610326611235565b60408051918252519081900360200190f35b34156106cf57fe5b6106e3600160a060020a036004351661123c565b6040805167ffffffffffffffff9092168252519081900360200190f35b341561070857fe5b6103266112ce565b60408051918252519081900360200190f35b341561072a57fe5b610326600160a060020a03600435166112d5565b60408051918252519081900360200190f35b341561075857fe5b6103266004356024356112f4565b60408051918252519081900360200190f35b341561078057fe5b61032661131a565b60408051918252519081900360200190f35b34156107a257fe5b610326610c5e565b60408051918252519081900360200190f35b34156107c457fe5b610326611323565b60408051918252519081900360200190f35b34156107e657fe5b6103146004351515611329565b005b34156107fd57fe5b610449611358565b60408051600160a060020a039092168252519081900360200190f35b341561082957fe5b610326611367565b60408051918252519081900360200190f35b341561084b57fe5b610398611377565b6040805160208082528351818301528351919283929083019185019080838382156103de575b8051825260208311156103de57601f1990920191602091820191016103be565b505050905090810190601f16801561040a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156108db57fe5b610314600160a060020a036004351660243567ffffffffffffffff6044358116906064358116906084351660a435151560c4351515611405565b005b341561091f57fe5b610314611680565b005b341561093157fe5b6103266116d6565b60408051918252519081900360200190f35b341561095357fe5b6103266116dc565b60408051918252519081900360200190f35b341561097557fe5b610314600160a060020a03600435166024356116e2565b005b341561099657fe5b610326611724565b60408051918252519081900360200190f35b34156109b857fe5b61032661172b565b60408051918252519081900360200190f35b34156109da57fe5b6109e2611734565b604080519115158252519081900360200190f35b34156109fe57fe5b61044961173d565b60408051600160a060020a039092168252519081900360200190f35b3415610a2a57fe5b61032661174c565b60408051918252519081900360200190f35b3415610a4c57fe5b610326600160a060020a036004351667ffffffffffffffff60243516611752565b60408051918252519081900360200190f35b3415610a8757fe5b61032661189b565b60408051918252519081900360200190f35b3415610aa957fe5b6103266118a1565b60408051918252519081900360200190f35b3415610acb57fe5b610326600160a060020a03600435811690602435166118a7565b60408051918252519081900360200190f35b3415610aff57fe5b6103266004356024356044356064356084356118d4565b60408051918252519081900360200190f35b3415610b3057fe5b61032661192d565b60408051918252519081900360200190f35b3415610b5257fe5b610314600160a060020a0360043581169060243516611934565b005b3415610b7657fe5b610314600160a060020a03600435166024356119d6565b005b3415610b9757fe5b610326611dff565b60408051918252519081900360200190f35b3415610b3057fe5b61032661192d565b60408051918252519081900360200190f35b341561099657fe5b610326611724565b60408051918252519081900360200190f35b610314611e13565b005b3415610c0757fe5b610326611f3d565b60408051918252519081900360200190f35b6000600b54421180610c3b575060175464ba43b740009010155b80610c4a5750600c5460165410155b15610c5757506001610c5b565b5060005b90565b60006000610c6e42600954610cb1565b905062093a80811115610c8657628954409150610cad565b62015180811115610ca1576064633db0d8c05b049150610cad565b60646345bcc8805b0491505b5090565b600082821115610cbd57fe5b508082035b92915050565b6000610cd434846112f4565b905081811115610ce45760006000fd5b600d54604051600160a060020a03909116903480156108fc02916000818181858888f193505050501515610d185760006000fd5b600f54600160a060020a0316600090815260016020526040902054610d43908263ffffffff610cb116565b600f54600160a060020a03908116600090815260016020526040808220939093553390911681522054610d7c908263ffffffff611f4316565b600160a060020a033316600090815260016020526040902055601780548201905560168054340190555b92915050565b642e90edd00081565b600160a060020a0381166000908152600460205260409020545b919050565b6064633db0d8c05b0481565b6005805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610e665780601f10610e3b57610100808354040283529160200191610e66565b820191906000526020600020905b815481529060010190602001808311610e4957829003601f168201915b505050505081565b8015801590610ea15750600160a060020a0333811660009081526002602090815260408083209386168352929052205415155b15610eac5760006000fd5b600160a060020a03338116600081815260026020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a35b5050565b601254600160a060020a031681565b60085481565b610f2b610c21565b1515610f375760006000fd5b610f42838383611f5d565b5b5b505050565b601054600160a060020a031681565b600b5481565b600460205281600052604060002081815481101515610f7957fe5b906000526020600020906003020160005b5080546001820154600290920154600160a060020a03909116935090915067ffffffffffffffff80821691680100000000000000008104821691608060020a8204169060ff60c060020a820481169160c860020a90041687565b60075481565b601154600160a060020a031681565b600d54600160a060020a031681565b6409502f900081565b60095481565b600060006000600060006000600060006000600460008c600160a060020a0316600160a060020a031681526020019081526020016000208a81548110151561105b57fe5b906000526020600020906003020160005b5090508060000160009054906101000a9004600160a060020a03169850806001015497508060020160109054906101000a900467ffffffffffffffff1695508060020160009054906101000a900467ffffffffffffffff1694508060020160089054906101000a900467ffffffffffffffff1693508060020160189054906101000a900460ff1692508060020160199054906101000a900460ff1691506112248160e060405190810160405290816000820160009054906101000a9004600160a060020a0316600160a060020a0316600160a060020a03168152602001600182015481526020016002820160009054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020016002820160089054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020016002820160109054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020016002820160189054906101000a900460ff161515151581526020016002820160199054906101000a900460ff16151515158152505042611f8a565b96505b509295985092959890939650565b62093a8081565b600160a060020a03811660009081526004602052604081205442915b818110156112c657600160a060020a038416600090815260046020526040902080546112bb91908390811061128957fe5b906000526020600020906003020160005b506002015468010000000000000000900467ffffffffffffffff1684611fda565b92505b600101611258565b5b5050919050565b6201518081565b600160a060020a0381166000908152600160205260409020545b919050565b60006113116113038484612009565b670de0b6b3a7640000612038565b90505b92915050565b64ba43b7400081565b600a5481565b600f5433600160a060020a039081169116146113455760006000fd5b6019805460ff19168215151790555b5b50565b600f54600160a060020a031681565b60646345bcc880610ddc565b0481565b6006805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610e665780601f10610e3b57610100808354040283529160200191610e66565b820191906000526020600020905b815481529060010190602001808311610e4957829003601f168201915b505050505081565b60008567ffffffffffffffff168567ffffffffffffffff16108061143c57508467ffffffffffffffff168467ffffffffffffffff16105b156114475760006000fd5b60035461145389610db5565b111561145f5760006000fd5b600160a060020a038816600090815260046020526040902080546001810161148783826122c9565b916000526020600020906003020160005b60e060405190810160405280876114b05760006114b2565b335b600160a060020a03908116825260208083018e905267ffffffffffffffff8c81166040808601919091528c82166060808701919091528f83166080808801919091528d151560a0808901919091528d151560c09889015288518b5473ffffffffffffffffffffffffffffffffffffffff19169716969096178a559387015160018a01559086015160029098018054918701519387015194870151969095015167ffffffffffffffff19909116978216979097176fffffffffffffffff0000000000000000191668010000000000000000928216929092029190911777ffffffffffffffff000000000000000000000000000000001916608060020a92909116919091021778ff000000000000000000000000000000000000000000000000191660c060020a921515929092029190911779ff00000000000000000000000000000000000000000000000000191660c860020a931515939093029290921790915550905061161f88886116e2565b87600160a060020a031633600160a060020a03167ff9565aecd648a0466ffb964a79eeccdf1120ad6276189c687a6e9fe73984d9bb8960018503604051808381526020018281526020019250505060405180910390a35b5050505050505050565b600f5433600160a060020a0390811691161461169c5760006000fd5b600f54604051600160a060020a039182169130163180156108fc02916000818181858888f1935050505015156116d25760006000fd5b5b5b565b60185481565b600c5481565b33600160a060020a031682600160a060020a0316141561170157610f0a565b611709610c21565b15156117155760006000fd5b610f0a8282612055565b5b5050565b624f1a0081565b642540be400081565b60195460ff1681565b600e54600160a060020a031681565b60165481565b6000600060006000600061176587610db5565b935083151561177e57611777876112d5565b9450611891565b60009250600091505b8382101561186757600160a060020a038716600090815260046020526040902080546118599185916118549190869081106117be57fe5b906000526020600020906003020160005b506040805160e0810182528254600160a060020a031681526001830154602082015260029092015467ffffffffffffffff8082169284019290925268010000000000000000810482166060840152608060020a8104909116608083015260ff60c060020a82048116151560a084015260c860020a90910416151560c082015289612080565b611f43565b92505b600190910190611787565b611879611873886112d5565b84610cb1565b905061188e8161188989896120a9565b6120bd565b94505b5050505092915050565b60135481565b60145481565b600160a060020a038083166000908152600260209081526040808320938516835292905220545b92915050565b60006000838610156118e95760009150611923565b8286106118f857869150611923565b61191d61190e886119098989610cb1565b612009565b6119188588610cb1565b612038565b90508091505b5095945050505050565b6289544081565b61193c610c21565b15156119485760006000fd5b600f5433600160a060020a039081169116146119645760006000fd5b60195460ff16156119755760006000fd5b61199582642540be4000426277f88081016301e133808201600080611405565b600f54600160a060020a0316600090815260016020526040812054610f0a91839190429062eff1008201906303c2670083019080611405565b5b5b5b5b5050565b600160a060020a0382166000908152600460205260408120805482918291859081106119fe57fe5b906000526020600020906003020160005b50600281015490935060c060020a900460ff161515611a2e5760006000fd5b825433600160a060020a03908116911614611a495760006000fd5b600283015460c860020a900460ff16611a625733611a66565b61dead5b6040805160e0810182528554600160a060020a0316815260018601546020820152600286015467ffffffffffffffff8082169383019390935268010000000000000000810483166060830152608060020a8104909216608082015260ff60c060020a83048116151560a083015260c860020a909204909116151560c0820152909250611af29042612080565b600160a060020a038616600090815260046020526040902080549192509085908110611b1a57fe5b906000526020600020906003020160005b50805473ffffffffffffffffffffffffffffffffffffffff19168155600060018083018290556002909201805479ffffffffffffffffffffffffffffffffffffffffffffffffffff19169055600160a060020a038716815260046020526040902080549091611ba0919063ffffffff610cb116565b81548110611baa57fe5b906000526020600020906003020160005b50600160a060020a0386166000908152600460205260409020805486908110611be057fe5b906000526020600020906003020160005b508154815473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03918216178255600180840154908301556002928301805493909201805467ffffffffffffffff191667ffffffffffffffff94851617808255835468010000000000000000908190048616026fffffffffffffffff000000000000000019909116178082558354608060020a9081900490951690940277ffffffffffffffff000000000000000000000000000000001990941693909317808455825460ff60c060020a918290048116151590910278ff0000000000000000000000000000000000000000000000001990921691909117808555925460c860020a9081900490911615150279ff0000000000000000000000000000000000000000000000000019909216919091179091558516600090815260046020526040902080546000190190611d3f90826122c9565b50600160a060020a038216600090815260016020526040902054611d69908263ffffffff611f4316565b600160a060020a038084166000908152600160205260408082209390935590871681522054611d9e908263ffffffff610cb116565b600160a060020a0380871660008181526001602090815260409182902094909455805185815290519286169391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929181900390910190a35b5050505050565b60155481565b6289544081565b624f1a0081565b6000600060095442101580611e295750600a5442105b15611e345760006000fd5b60195460ff1615611e455760006000fd5b6010546000925033600160a060020a0390811691161415611e665760135491505b60115433600160a060020a0390811691161415611e835760145491505b60125433600160a060020a0390811691161415611ea05760155491505b811515611ead5760006000fd5b611ed48260646345bcc8805b04016102c86127106301312d0002601854610cb1565b610cc8565b9050611efb33611ee434856112f4565b42426277f88001426301e133800160006000611405565b60188054820190556040805182815290517f9e352721883879ced8efbcaca8e7316a3367205e490f0829362d23c63819e8ee9181900360200190a15b5b5b5050565b60175481565b600082820183811015611f5257fe5b8091505b5092915050565b8281611f698242611752565b811115611f765760006000fd5b611df88585856120d7565b5b5b5050505050565b600061131183602001518367ffffffffffffffff16856080015167ffffffffffffffff16866040015167ffffffffffffffff16876060015167ffffffffffffffff166118d4565b90505b92915050565b60008167ffffffffffffffff168367ffffffffffffffff161015611ffe5781611311565b825b90505b92915050565b6000828202831580612025575082848281151561202257fe5b04145b1515611f5257fe5b8091505b5092915050565b60006000828481151561204757fe5b0490508091505b5092915050565b33816120618242611752565b81111561206e5760006000fd5b61207884846121fb565b5b5b50505050565b600061131161208f8484611f8a565b60208501519063ffffffff610cb116565b90505b92915050565b6000611311836112d5565b90505b92915050565b6000818310611ffe5781611311565b825b90505b92915050565b6000606060643610156120ea5760006000fd5b600160a060020a038086166000908152600260209081526040808320338516845282528083205493881683526001909152902054909250612131908463ffffffff611f4316565b600160a060020a038086166000908152600160205260408082209390935590871681522054612166908463ffffffff610cb116565b600160a060020a03861660009081526001602052604090205561218f828463ffffffff610cb116565b600160a060020a038087166000818152600260209081526040808320338616845282529182902094909455805187815290519288169391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929181900390910190a35b5b5050505050565b6040604436101561220c5760006000fd5b600160a060020a033316600090815260016020526040902054612235908363ffffffff610cb116565b600160a060020a03338116600090815260016020526040808220939093559085168152205461226a908363ffffffff611f4316565b600160a060020a038085166000818152600160209081526040918290209490945580518681529051919333909316927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a35b5b505050565b815481835581811511610f4257600302816003028360005260206000209182019101610f42919061232d565b5b505050565b815481835581811511610f4257600302816003028360005260206000209182019101610f42919061232d565b5b505050565b610c5b91905b80821115610cad57805473ffffffffffffffffffffffffffffffffffffffff191681556000600182015560028101805479ffffffffffffffffffffffffffffffffffffffffffffffffffff19169055600301612333565b5090565b905600a165627a7a7230582093820a1753fe21e75caf47ba06c414a6862903a66109dabb25e3b5ccc0e1fd850029000000000000000000000000af1675dfb3cdf1c88cf43f5755a8a336765b30680000000000000000000000000eebf59e9fdf08357dcb8380ae3568824a4a8494000000000000000000000000000000000000000000000000000000005b381980000000000000000000000000000000000000000000000000000000005b19fe56000000000000000000000000000000000000000000000878678326eac9000000000000000000000000000000ea2bd47453cc18a0627c4cf071bc81e0183aff7000000000000000000000000000000000000000000000000000000000004d0427000000000000000000000000727b716bd33a97d63f2c3a1e16520958bc121b2500000000000000000000000000000000000000000000000000000000001f550c000000000000000000000000da63e9ffd2bb9301dea1647df838eac28a7a87db000000000000000000000000000000000000000000000000000000000023b4a0

Deployed Bytecode

0x6060604052361561026f5763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663028118a1811461031657806302a72a4c14610338578063031f22e71461036657806306fdde0314610388578063095ea7b3146104185780630fdfa5ee1461043957806318160ddd1461046557806323b872dd1461048757806327c1f423146104ae5780632c27e581146104da5780632c71e60a146104fc578063313ce5671461056d578063529865c91461058f5780635462870d146105bb57806354ecd994146105e75780635fd1bbc414610609578063600e85b71461062b5780636698baaa146106a55780636c182e99146106c75780636f2590771461070057806370a08231146107225780637133c0c0146107505780637717403b146107785780638a4b08d91461079a5780638a7c63c5146107bc5780638c346690146107de5780638f84aa09146107f55780638fd712ae1461082157806395d89b41146108435780639754a4d9146108d35780639890220b146109175780639b914973146109295780639d61e6241461094b578063a9059cbb1461096d578063ad3c0b9d1461098e578063b475a1c8146109b0578063b9b8af0b146109d2578063c3650a21146109f6578063cd72ab6914610a22578063d347c20514610a44578063d719213e14610a7f578063dbc65f8514610aa1578063dd62ed3e14610ac3578063df3c211b14610af7578063e02f8d3314610b28578063e877715814610b4a578063eb944e4c14610b6e578063eed04e6914610b8f578063efe7926814610b28578063f514f0f91461098e578063f590aacc14610bf5578063f86b5ebc14610bff575b6103145b60006009544210156102855760006000fd5b61028d610c21565b156102985760006000fd5b60195460ff16156102a95760006000fd5b6102cd6102b4610c5e565b6102c86127106304c4b40002601754610cb1565b610cc8565b604080518281529051919250600160a060020a033316917fe3d4187f6ca4248660cc0ac8b8056515bac4a8132be2eca31d6d0cc170722a7e9181900360200190a25b5b5b50565b005b341561031e57fe5b610326610dac565b60408051918252519081900360200190f35b341561034057fe5b610326600160a060020a0360043516610db5565b60408051918252519081900360200190f35b341561036e57fe5b610326610dd4565b60408051918252519081900360200190f35b341561039057fe5b610398610de0565b6040805160208082528351818301528351919283929083019185019080838382156103de575b8051825260208311156103de57601f1990920191602091820191016103be565b505050905090810190601f16801561040a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561042057fe5b610314600160a060020a0360043516602435610e6e565b005b341561044157fe5b610449610f0e565b60408051600160a060020a039092168252519081900360200190f35b341561046d57fe5b610326610f1d565b60408051918252519081900360200190f35b341561048f57fe5b610314600160a060020a0360043581169060243516604435610f23565b005b34156104b657fe5b610449610f49565b60408051600160a060020a039092168252519081900360200190f35b34156104e257fe5b610326610f58565b60408051918252519081900360200190f35b341561050457fe5b61051b600160a060020a0360043516602435610f5e565b60408051600160a060020a039098168852602088019690965267ffffffffffffffff9485168787015292841660608701529216608085015290151560a0840152151560c0830152519081900360e00190f35b341561057557fe5b610326610fe4565b60408051918252519081900360200190f35b341561059757fe5b610449610fea565b60408051600160a060020a039092168252519081900360200190f35b34156105c357fe5b610449610ff9565b60408051600160a060020a039092168252519081900360200190f35b34156105ef57fe5b610326611008565b60408051918252519081900360200190f35b341561061157fe5b610326611011565b60408051918252519081900360200190f35b341561063357fe5b61064a600160a060020a0360043516602435611017565b60408051600160a060020a03909916895260208901979097528787019590955267ffffffffffffffff9384166060880152918316608087015290911660a0850152151560c0840152151560e083015251908190036101000190f35b34156106ad57fe5b610326611235565b60408051918252519081900360200190f35b34156106cf57fe5b6106e3600160a060020a036004351661123c565b6040805167ffffffffffffffff9092168252519081900360200190f35b341561070857fe5b6103266112ce565b60408051918252519081900360200190f35b341561072a57fe5b610326600160a060020a03600435166112d5565b60408051918252519081900360200190f35b341561075857fe5b6103266004356024356112f4565b60408051918252519081900360200190f35b341561078057fe5b61032661131a565b60408051918252519081900360200190f35b34156107a257fe5b610326610c5e565b60408051918252519081900360200190f35b34156107c457fe5b610326611323565b60408051918252519081900360200190f35b34156107e657fe5b6103146004351515611329565b005b34156107fd57fe5b610449611358565b60408051600160a060020a039092168252519081900360200190f35b341561082957fe5b610326611367565b60408051918252519081900360200190f35b341561084b57fe5b610398611377565b6040805160208082528351818301528351919283929083019185019080838382156103de575b8051825260208311156103de57601f1990920191602091820191016103be565b505050905090810190601f16801561040a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156108db57fe5b610314600160a060020a036004351660243567ffffffffffffffff6044358116906064358116906084351660a435151560c4351515611405565b005b341561091f57fe5b610314611680565b005b341561093157fe5b6103266116d6565b60408051918252519081900360200190f35b341561095357fe5b6103266116dc565b60408051918252519081900360200190f35b341561097557fe5b610314600160a060020a03600435166024356116e2565b005b341561099657fe5b610326611724565b60408051918252519081900360200190f35b34156109b857fe5b61032661172b565b60408051918252519081900360200190f35b34156109da57fe5b6109e2611734565b604080519115158252519081900360200190f35b34156109fe57fe5b61044961173d565b60408051600160a060020a039092168252519081900360200190f35b3415610a2a57fe5b61032661174c565b60408051918252519081900360200190f35b3415610a4c57fe5b610326600160a060020a036004351667ffffffffffffffff60243516611752565b60408051918252519081900360200190f35b3415610a8757fe5b61032661189b565b60408051918252519081900360200190f35b3415610aa957fe5b6103266118a1565b60408051918252519081900360200190f35b3415610acb57fe5b610326600160a060020a03600435811690602435166118a7565b60408051918252519081900360200190f35b3415610aff57fe5b6103266004356024356044356064356084356118d4565b60408051918252519081900360200190f35b3415610b3057fe5b61032661192d565b60408051918252519081900360200190f35b3415610b5257fe5b610314600160a060020a0360043581169060243516611934565b005b3415610b7657fe5b610314600160a060020a03600435166024356119d6565b005b3415610b9757fe5b610326611dff565b60408051918252519081900360200190f35b3415610b3057fe5b61032661192d565b60408051918252519081900360200190f35b341561099657fe5b610326611724565b60408051918252519081900360200190f35b610314611e13565b005b3415610c0757fe5b610326611f3d565b60408051918252519081900360200190f35b6000600b54421180610c3b575060175464ba43b740009010155b80610c4a5750600c5460165410155b15610c5757506001610c5b565b5060005b90565b60006000610c6e42600954610cb1565b905062093a80811115610c8657628954409150610cad565b62015180811115610ca1576064633db0d8c05b049150610cad565b60646345bcc8805b0491505b5090565b600082821115610cbd57fe5b508082035b92915050565b6000610cd434846112f4565b905081811115610ce45760006000fd5b600d54604051600160a060020a03909116903480156108fc02916000818181858888f193505050501515610d185760006000fd5b600f54600160a060020a0316600090815260016020526040902054610d43908263ffffffff610cb116565b600f54600160a060020a03908116600090815260016020526040808220939093553390911681522054610d7c908263ffffffff611f4316565b600160a060020a033316600090815260016020526040902055601780548201905560168054340190555b92915050565b642e90edd00081565b600160a060020a0381166000908152600460205260409020545b919050565b6064633db0d8c05b0481565b6005805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610e665780601f10610e3b57610100808354040283529160200191610e66565b820191906000526020600020905b815481529060010190602001808311610e4957829003601f168201915b505050505081565b8015801590610ea15750600160a060020a0333811660009081526002602090815260408083209386168352929052205415155b15610eac5760006000fd5b600160a060020a03338116600081815260026020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a35b5050565b601254600160a060020a031681565b60085481565b610f2b610c21565b1515610f375760006000fd5b610f42838383611f5d565b5b5b505050565b601054600160a060020a031681565b600b5481565b600460205281600052604060002081815481101515610f7957fe5b906000526020600020906003020160005b5080546001820154600290920154600160a060020a03909116935090915067ffffffffffffffff80821691680100000000000000008104821691608060020a8204169060ff60c060020a820481169160c860020a90041687565b60075481565b601154600160a060020a031681565b600d54600160a060020a031681565b6409502f900081565b60095481565b600060006000600060006000600060006000600460008c600160a060020a0316600160a060020a031681526020019081526020016000208a81548110151561105b57fe5b906000526020600020906003020160005b5090508060000160009054906101000a9004600160a060020a03169850806001015497508060020160109054906101000a900467ffffffffffffffff1695508060020160009054906101000a900467ffffffffffffffff1694508060020160089054906101000a900467ffffffffffffffff1693508060020160189054906101000a900460ff1692508060020160199054906101000a900460ff1691506112248160e060405190810160405290816000820160009054906101000a9004600160a060020a0316600160a060020a0316600160a060020a03168152602001600182015481526020016002820160009054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020016002820160089054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020016002820160109054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020016002820160189054906101000a900460ff161515151581526020016002820160199054906101000a900460ff16151515158152505042611f8a565b96505b509295985092959890939650565b62093a8081565b600160a060020a03811660009081526004602052604081205442915b818110156112c657600160a060020a038416600090815260046020526040902080546112bb91908390811061128957fe5b906000526020600020906003020160005b506002015468010000000000000000900467ffffffffffffffff1684611fda565b92505b600101611258565b5b5050919050565b6201518081565b600160a060020a0381166000908152600160205260409020545b919050565b60006113116113038484612009565b670de0b6b3a7640000612038565b90505b92915050565b64ba43b7400081565b600a5481565b600f5433600160a060020a039081169116146113455760006000fd5b6019805460ff19168215151790555b5b50565b600f54600160a060020a031681565b60646345bcc880610ddc565b0481565b6006805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610e665780601f10610e3b57610100808354040283529160200191610e66565b820191906000526020600020905b815481529060010190602001808311610e4957829003601f168201915b505050505081565b60008567ffffffffffffffff168567ffffffffffffffff16108061143c57508467ffffffffffffffff168467ffffffffffffffff16105b156114475760006000fd5b60035461145389610db5565b111561145f5760006000fd5b600160a060020a038816600090815260046020526040902080546001810161148783826122c9565b916000526020600020906003020160005b60e060405190810160405280876114b05760006114b2565b335b600160a060020a03908116825260208083018e905267ffffffffffffffff8c81166040808601919091528c82166060808701919091528f83166080808801919091528d151560a0808901919091528d151560c09889015288518b5473ffffffffffffffffffffffffffffffffffffffff19169716969096178a559387015160018a01559086015160029098018054918701519387015194870151969095015167ffffffffffffffff19909116978216979097176fffffffffffffffff0000000000000000191668010000000000000000928216929092029190911777ffffffffffffffff000000000000000000000000000000001916608060020a92909116919091021778ff000000000000000000000000000000000000000000000000191660c060020a921515929092029190911779ff00000000000000000000000000000000000000000000000000191660c860020a931515939093029290921790915550905061161f88886116e2565b87600160a060020a031633600160a060020a03167ff9565aecd648a0466ffb964a79eeccdf1120ad6276189c687a6e9fe73984d9bb8960018503604051808381526020018281526020019250505060405180910390a35b5050505050505050565b600f5433600160a060020a0390811691161461169c5760006000fd5b600f54604051600160a060020a039182169130163180156108fc02916000818181858888f1935050505015156116d25760006000fd5b5b5b565b60185481565b600c5481565b33600160a060020a031682600160a060020a0316141561170157610f0a565b611709610c21565b15156117155760006000fd5b610f0a8282612055565b5b5050565b624f1a0081565b642540be400081565b60195460ff1681565b600e54600160a060020a031681565b60165481565b6000600060006000600061176587610db5565b935083151561177e57611777876112d5565b9450611891565b60009250600091505b8382101561186757600160a060020a038716600090815260046020526040902080546118599185916118549190869081106117be57fe5b906000526020600020906003020160005b506040805160e0810182528254600160a060020a031681526001830154602082015260029092015467ffffffffffffffff8082169284019290925268010000000000000000810482166060840152608060020a8104909116608083015260ff60c060020a82048116151560a084015260c860020a90910416151560c082015289612080565b611f43565b92505b600190910190611787565b611879611873886112d5565b84610cb1565b905061188e8161188989896120a9565b6120bd565b94505b5050505092915050565b60135481565b60145481565b600160a060020a038083166000908152600260209081526040808320938516835292905220545b92915050565b60006000838610156118e95760009150611923565b8286106118f857869150611923565b61191d61190e886119098989610cb1565b612009565b6119188588610cb1565b612038565b90508091505b5095945050505050565b6289544081565b61193c610c21565b15156119485760006000fd5b600f5433600160a060020a039081169116146119645760006000fd5b60195460ff16156119755760006000fd5b61199582642540be4000426277f88081016301e133808201600080611405565b600f54600160a060020a0316600090815260016020526040812054610f0a91839190429062eff1008201906303c2670083019080611405565b5b5b5b5b5050565b600160a060020a0382166000908152600460205260408120805482918291859081106119fe57fe5b906000526020600020906003020160005b50600281015490935060c060020a900460ff161515611a2e5760006000fd5b825433600160a060020a03908116911614611a495760006000fd5b600283015460c860020a900460ff16611a625733611a66565b61dead5b6040805160e0810182528554600160a060020a0316815260018601546020820152600286015467ffffffffffffffff8082169383019390935268010000000000000000810483166060830152608060020a8104909216608082015260ff60c060020a83048116151560a083015260c860020a909204909116151560c0820152909250611af29042612080565b600160a060020a038616600090815260046020526040902080549192509085908110611b1a57fe5b906000526020600020906003020160005b50805473ffffffffffffffffffffffffffffffffffffffff19168155600060018083018290556002909201805479ffffffffffffffffffffffffffffffffffffffffffffffffffff19169055600160a060020a038716815260046020526040902080549091611ba0919063ffffffff610cb116565b81548110611baa57fe5b906000526020600020906003020160005b50600160a060020a0386166000908152600460205260409020805486908110611be057fe5b906000526020600020906003020160005b508154815473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03918216178255600180840154908301556002928301805493909201805467ffffffffffffffff191667ffffffffffffffff94851617808255835468010000000000000000908190048616026fffffffffffffffff000000000000000019909116178082558354608060020a9081900490951690940277ffffffffffffffff000000000000000000000000000000001990941693909317808455825460ff60c060020a918290048116151590910278ff0000000000000000000000000000000000000000000000001990921691909117808555925460c860020a9081900490911615150279ff0000000000000000000000000000000000000000000000000019909216919091179091558516600090815260046020526040902080546000190190611d3f90826122c9565b50600160a060020a038216600090815260016020526040902054611d69908263ffffffff611f4316565b600160a060020a038084166000908152600160205260408082209390935590871681522054611d9e908263ffffffff610cb116565b600160a060020a0380871660008181526001602090815260409182902094909455805185815290519286169391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929181900390910190a35b5050505050565b60155481565b6289544081565b624f1a0081565b6000600060095442101580611e295750600a5442105b15611e345760006000fd5b60195460ff1615611e455760006000fd5b6010546000925033600160a060020a0390811691161415611e665760135491505b60115433600160a060020a0390811691161415611e835760145491505b60125433600160a060020a0390811691161415611ea05760155491505b811515611ead5760006000fd5b611ed48260646345bcc8805b04016102c86127106301312d0002601854610cb1565b610cc8565b9050611efb33611ee434856112f4565b42426277f88001426301e133800160006000611405565b60188054820190556040805182815290517f9e352721883879ced8efbcaca8e7316a3367205e490f0829362d23c63819e8ee9181900360200190a15b5b5b5050565b60175481565b600082820183811015611f5257fe5b8091505b5092915050565b8281611f698242611752565b811115611f765760006000fd5b611df88585856120d7565b5b5b5050505050565b600061131183602001518367ffffffffffffffff16856080015167ffffffffffffffff16866040015167ffffffffffffffff16876060015167ffffffffffffffff166118d4565b90505b92915050565b60008167ffffffffffffffff168367ffffffffffffffff161015611ffe5781611311565b825b90505b92915050565b6000828202831580612025575082848281151561202257fe5b04145b1515611f5257fe5b8091505b5092915050565b60006000828481151561204757fe5b0490508091505b5092915050565b33816120618242611752565b81111561206e5760006000fd5b61207884846121fb565b5b5b50505050565b600061131161208f8484611f8a565b60208501519063ffffffff610cb116565b90505b92915050565b6000611311836112d5565b90505b92915050565b6000818310611ffe5781611311565b825b90505b92915050565b6000606060643610156120ea5760006000fd5b600160a060020a038086166000908152600260209081526040808320338516845282528083205493881683526001909152902054909250612131908463ffffffff611f4316565b600160a060020a038086166000908152600160205260408082209390935590871681522054612166908463ffffffff610cb116565b600160a060020a03861660009081526001602052604090205561218f828463ffffffff610cb116565b600160a060020a038087166000818152600260209081526040808320338616845282529182902094909455805187815290519288169391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929181900390910190a35b5b5050505050565b6040604436101561220c5760006000fd5b600160a060020a033316600090815260016020526040902054612235908363ffffffff610cb116565b600160a060020a03338116600090815260016020526040808220939093559085168152205461226a908363ffffffff611f4316565b600160a060020a038085166000818152600160209081526040918290209490945580518681529051919333909316927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a35b5b505050565b815481835581811511610f4257600302816003028360005260206000209182019101610f42919061232d565b5b505050565b815481835581811511610f4257600302816003028360005260206000209182019101610f42919061232d565b5b505050565b610c5b91905b80821115610cad57805473ffffffffffffffffffffffffffffffffffffffff191681556000600182015560028101805479ffffffffffffffffffffffffffffffffffffffffffffffffffff19169055600301612333565b5090565b905600a165627a7a7230582093820a1753fe21e75caf47ba06c414a6862903a66109dabb25e3b5ccc0e1fd850029

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

000000000000000000000000af1675dfb3cdf1c88cf43f5755a8a336765b30680000000000000000000000000eebf59e9fdf08357dcb8380ae3568824a4a8494000000000000000000000000000000000000000000000000000000005b381980000000000000000000000000000000000000000000000000000000005b19fe56000000000000000000000000000000000000000000000878678326eac9000000000000000000000000000000ea2bd47453cc18a0627c4cf071bc81e0183aff7000000000000000000000000000000000000000000000000000000000004d0427000000000000000000000000727b716bd33a97d63f2c3a1e16520958bc121b2500000000000000000000000000000000000000000000000000000000001f550c000000000000000000000000da63e9ffd2bb9301dea1647df838eac28a7a87db000000000000000000000000000000000000000000000000000000000023b4a0

-----Decoded View---------------
Arg [0] : _multisig (address): 0xaF1675Dfb3CdF1C88cf43F5755a8a336765b3068
Arg [1] : _danserviceTeam (address): 0x0eebf59E9fdf08357DCb8380aE3568824a4A8494
Arg [2] : _publicStartTime (uint256): 1530403200
Arg [3] : _privateStartTime (uint256): 1528430166
Arg [4] : _hardcapInEth (uint256): 40000000000000000000000
Arg [5] : _prebuy1 (address): 0xEA2BD47453cC18A0627c4cF071Bc81E0183Aff70
Arg [6] : _preBuyPrice1 (uint256): 5047335
Arg [7] : _prebuy2 (address): 0x727B716bd33a97D63f2C3a1E16520958BC121B25
Arg [8] : _preBuyPrice2 (uint256): 2053388
Arg [9] : _prebuy3 (address): 0xDA63E9FFD2BB9301deA1647dF838eac28A7A87dB
Arg [10] : _preBuyPrice3 (uint256): 2340000

-----Encoded View---------------
11 Constructor Arguments found :
Arg [0] : 000000000000000000000000af1675dfb3cdf1c88cf43f5755a8a336765b3068
Arg [1] : 0000000000000000000000000eebf59e9fdf08357dcb8380ae3568824a4a8494
Arg [2] : 000000000000000000000000000000000000000000000000000000005b381980
Arg [3] : 000000000000000000000000000000000000000000000000000000005b19fe56
Arg [4] : 000000000000000000000000000000000000000000000878678326eac9000000
Arg [5] : 000000000000000000000000ea2bd47453cc18a0627c4cf071bc81e0183aff70
Arg [6] : 00000000000000000000000000000000000000000000000000000000004d0427
Arg [7] : 000000000000000000000000727b716bd33a97d63f2c3a1e16520958bc121b25
Arg [8] : 00000000000000000000000000000000000000000000000000000000001f550c
Arg [9] : 000000000000000000000000da63e9ffd2bb9301dea1647df838eac28a7a87db
Arg [10] : 000000000000000000000000000000000000000000000000000000000023b4a0


Swarm Source

bzzr://93820a1753fe21e75caf47ba06c414a6862903a66109dabb25e3b5ccc0e1fd85
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.