ETH Price: $2,804.92 (+0.71%)

Contract

0x567b27ae0D0Ea4FcA292f447D819aa1B366375C4
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Distribute Token...55765512018-05-08 7:01:522483 days ago1525762912IN
0x567b27ae...B366375C4
0 ETH0.0024999640
Distribute Token...53014912018-03-22 13:56:322530 days ago1521726992IN
0x567b27ae...B366375C4
0 ETH0.0024999640
Distribute Token...52652252018-03-16 11:10:432536 days ago1521198643IN
0x567b27ae...B366375C4
0 ETH0.0018999640
Distribute Token...52357942018-03-11 11:09:292541 days ago1520766569IN
0x567b27ae...B366375C4
0 ETH0.0024999640
Distribute Token...52357922018-03-11 11:08:582541 days ago1520766538IN
0x567b27ae...B366375C4
0 ETH0.0030999640
Distribute Token...52357922018-03-11 11:08:582541 days ago1520766538IN
0x567b27ae...B366375C4
0 ETH0.0030999640
Distribute To Al...52357922018-03-11 11:08:582541 days ago1520766538IN
0x567b27ae...B366375C4
0 ETH0.0031452440
Distribute Token...52357922018-03-11 11:08:582541 days ago1520766538IN
0x567b27ae...B366375C4
0 ETH0.0030999640
Distribute Token...52357912018-03-11 11:08:422541 days ago1520766522IN
0x567b27ae...B366375C4
0 ETH0.003097440
Distribute Token...52357902018-03-11 11:07:392541 days ago1520766459IN
0x567b27ae...B366375C4
0 ETH0.003097440
Distribute Token...51842152018-03-02 17:21:092549 days ago1520011269IN
0x567b27ae...B366375C4
0 ETH0.0024999640
Distribute To Al...51601282018-02-26 14:56:212554 days ago1519656981IN
0x567b27ae...B366375C4
0 ETH0.0025452440
Distribute Token...51601272018-02-26 14:56:032554 days ago1519656963IN
0x567b27ae...B366375C4
0 ETH0.0030999640
Distribute Token...51530102018-02-25 9:28:202555 days ago1519550900IN
0x567b27ae...B366375C4
0 ETH0.0024999640
Distribute Token...51420532018-02-23 12:44:262557 days ago1519389866IN
0x567b27ae...B366375C4
0 ETH0.0024999640
Distribute Token...51377102018-02-22 19:06:262557 days ago1519326386IN
0x567b27ae...B366375C4
0 ETH0.0024999640
Distribute Token...51305812018-02-21 14:05:232559 days ago1519221923IN
0x567b27ae...B366375C4
0 ETH0.0024999640
Distribute Token...51305812018-02-21 14:05:232559 days ago1519221923IN
0x567b27ae...B366375C4
0 ETH0.0030999640
Distribute Token...51260902018-02-20 19:23:082559 days ago1519154588IN
0x567b27ae...B366375C4
0 ETH0.0024999640
Distribute Token...51260882018-02-20 19:22:342559 days ago1519154554IN
0x567b27ae...B366375C4
0 ETH0.0030999640
Distribute Token...51260882018-02-20 19:22:342559 days ago1519154554IN
0x567b27ae...B366375C4
0 ETH0.0030999640
Distribute Token...51260882018-02-20 19:22:342559 days ago1519154554IN
0x567b27ae...B366375C4
0 ETH0.0030999640
Distribute Token...51236952018-02-20 9:32:142560 days ago1519119134IN
0x567b27ae...B366375C4
0 ETH0.002497440
Distribute Token...51236952018-02-20 9:32:142560 days ago1519119134IN
0x567b27ae...B366375C4
0 ETH0.0030999640
Distribute Token...51236942018-02-20 9:31:512560 days ago1519119111IN
0x567b27ae...B366375C4
0 ETH0.0030999640
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block
From
To
50307082018-02-04 18:37:242575 days ago1517769444
0x567b27ae...B366375C4
4.26417411 ETH
50306942018-02-04 18:32:172575 days ago1517769137
0x567b27ae...B366375C4
4.26417411 ETH
50306692018-02-04 18:26:392575 days ago1517768799
0x567b27ae...B366375C4
4.26417411 ETH
50305372018-02-04 17:54:412575 days ago1517766881
0x567b27ae...B366375C4
4.26417411 ETH
50305282018-02-04 17:52:562575 days ago1517766776
0x567b27ae...B366375C4
3.5 ETH
50304572018-02-04 17:36:572575 days ago1517765817
0x567b27ae...B366375C4
4.26417411 ETH
50304332018-02-04 17:32:402575 days ago1517765560
0x567b27ae...B366375C4
0.7 ETH
50304012018-02-04 17:24:402575 days ago1517765080
0x567b27ae...B366375C4
4.26417411 ETH
50303382018-02-04 17:07:042576 days ago1517764024
0x567b27ae...B366375C4
4.26417411 ETH
50302832018-02-04 16:54:472576 days ago1517763287
0x567b27ae...B366375C4
3.068 ETH
50302602018-02-04 16:49:072576 days ago1517762947
0x567b27ae...B366375C4
4.26417411 ETH
50302572018-02-04 16:48:192576 days ago1517762899
0x567b27ae...B366375C4
4.26417411 ETH
50302422018-02-04 16:45:432576 days ago1517762743
0x567b27ae...B366375C4
4.26417411 ETH
50301862018-02-04 16:31:402576 days ago1517761900
0x567b27ae...B366375C4
4.26417411 ETH
50301742018-02-04 16:29:212576 days ago1517761761
0x567b27ae...B366375C4
4.26417411 ETH
50301702018-02-04 16:28:452576 days ago1517761725
0x567b27ae...B366375C4
0.22 ETH
50301692018-02-04 16:28:172576 days ago1517761697
0x567b27ae...B366375C4
4.26417411 ETH
50301582018-02-04 16:26:232576 days ago1517761583
0x567b27ae...B366375C4
1.09 ETH
50301372018-02-04 16:20:212576 days ago1517761221
0x567b27ae...B366375C4
4.26417411 ETH
50301322018-02-04 16:19:292576 days ago1517761169
0x567b27ae...B366375C4
4.04 ETH
50300912018-02-04 16:08:352576 days ago1517760515
0x567b27ae...B366375C4
4.26417411 ETH
50300782018-02-04 16:04:462576 days ago1517760286
0x567b27ae...B366375C4
4.26417411 ETH
50300262018-02-04 15:53:012576 days ago1517759581
0x567b27ae...B366375C4
4.26417411 ETH
50300262018-02-04 15:53:012576 days ago1517759581
0x567b27ae...B366375C4
4.26417411 ETH
50300222018-02-04 15:52:042576 days ago1517759524
0x567b27ae...B366375C4
2.41 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
DadiMaxCapSale

Compiler Version
v0.4.18+commit.9cf6e910

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2018-02-04
*/

pragma solidity ^0.4.11;

/**
 * @title SafeMath
 * @dev Math operations with safety checks that throw on error
 */
library SafeMath {
  function mul(uint256 a, uint256 b) internal pure returns (uint256) {
    uint256 c = a * b;
    assert(a == 0 || c / a == b);
    return c;
  }

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

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

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

/**
 * @title Ownable
 * @dev The Ownable contract has an owner address, and provides basic authorization control
 * functions, this simplifies the implementation of "user permissions".
 */
contract Ownable {
  address public owner;


  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);


  /**
   * @dev The Ownable constructor sets the original `owner` of the contract to the sender
   * account.
   */
  function Ownable() public {
    owner = msg.sender;
  }


  /**
   * @dev Throws if called by any account other than the owner.
   */
  modifier onlyOwner() {
    require(msg.sender == owner);
    _;
  }


  /**
   * @dev Allows the current owner to transfer control of the contract to a newOwner.
   * @param newOwner The address to transfer ownership to.
   */
  function transferOwnership(address newOwner) onlyOwner public {
    require(newOwner != address(0));
    OwnershipTransferred(owner, newOwner);
    owner = newOwner;
  }

}

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

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

  mapping(address => uint256) balances;

  /**
  * @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, uint256 _value) public returns (bool) {
    require(_to != address(0));

    // SafeMath.sub will throw if there is not enough balance.
    balances[msg.sender] = balances[msg.sender].sub(_value);
    balances[_to] = balances[_to].add(_value);
    Transfer(msg.sender, _to, _value);
    return true;
  }

  /**
  * @dev Gets the balance of the specified address.
  * @param _owner The address to query the the balance of.
  * @return An uint256 representing the amount owned by the passed address.
  */
  function balanceOf(address _owner) public constant returns (uint256 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) public constant returns (uint256);
  function transferFrom(address from, address to, uint256 value) public returns (bool);
  function approve(address spender, uint256 value) public returns (bool);
  event Approval(address indexed owner, address indexed spender, uint256 value);
}

/**
 * @title Standard ERC20 token
 *
 * @dev Implementation of the basic standard 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 ERC20, BasicToken {

  mapping (address => mapping (address => uint256)) 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 uint256 the amount of tokens to be transferred
   */
  function transferFrom(address _from, address _to, uint256 _value) public returns (bool) {
    require(_to != address(0));

    uint256 _allowance = allowed[_from][msg.sender];

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

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

  /**
   * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender.
   *
   * Beware that changing an allowance with this method brings the risk that someone may use both the old
   * and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this
   * race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards:
   * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
   * @param _spender The address which will spend the funds.
   * @param _value The amount of tokens to be spent.
   */
  function approve(address _spender, uint256 _value) public returns (bool) {
    allowed[msg.sender][_spender] = _value;
    Approval(msg.sender, _spender, _value);
    return true;
  }

  /**
   * @dev Function to check the amount of tokens that 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 uint256 specifying the amount of tokens still available for the spender.
   */
  function allowance(address _owner, address _spender) public constant returns (uint256 remaining) {
    return allowed[_owner][_spender];
  }

  /**
   * approve should be called when allowed[_spender] == 0. To increment
   * allowed value is better to use this function to avoid 2 calls (and wait until
   * the first transaction is mined)
   * From MonolithDAO Token.sol
   */
  function increaseApproval (address _spender, uint _addedValue) public returns (bool success) {
    allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue);
    Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
    return true;
  }

  function decreaseApproval (address _spender, uint _subtractedValue) public returns (bool success) {
    uint oldValue = allowed[msg.sender][_spender];
    if (_subtractedValue > oldValue) {
      allowed[msg.sender][_spender] = 0;
    } else {
      allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue);
    }
    Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
    return true;
  }
}


/*****
* @title The DADI MaxCap Contract
*/
contract DadiMaxCapSale is Ownable {
    using SafeMath for uint256;

    StandardToken public token;                         // The DADI ERC20 token */
    address[] public saleWallets;

    struct WhitelistUser {
      uint index;
    }

    struct Investor {
      uint256 tokens;
      uint256 contribution;
      bool distributed;
      uint index;
    }

    uint256 public tokenSupply;
    uint256 public tokensPurchased = 0;
    uint256 public individualCap = 5000 * 1000;         // USD$5,000
    uint256 public saleTokenPrice = 500;                // USD$0.50
    uint256 public ethRate = 1172560;                   // Original ETH rate. 1 ETH = 1172.56 USD
 
    mapping(address => WhitelistUser) private whitelisted;
    address[] private whitelistedIndex;
    mapping(address => Investor) private investors;
    address[] private investorIndex;

    /*****
    * State for Sale Modes
    *  0 - Preparing:            All contract initialization calls
    *  1 - Sale:                 Contract is in the sale period
    *  2 - SaleFinalized         Sale period is finalized, no more payments are allowed
    *  3 - Success:              Sale Successful
    *  4 - TokenDistribution:    Sale finished, tokens can be distributed
    *  5 - Closed:               Sale closed, no tokens more can be distributed
    */
    enum SaleState { Preparing, Sale, SaleFinalized, Success, TokenDistribution, Closed }
    SaleState public state = SaleState.Preparing;

    event LogTokenPurchase(address indexed purchaser, address indexed beneficiary, uint256 value, uint256 tokens);
    event LogTokenDistribution(address recipient, uint256 tokens);
    event LogRedistributeTokens(address recipient, SaleState _state, uint256 tokens);
    event LogFundTransfer(address wallet, uint256 value);
    event LogRefund(address wallet, uint256 value);
    event LogStateChange(SaleState _state);
    event LogNewWhitelistUser(address indexed userAddress, uint index);

    /*****
    * @dev Modifier to check that amount transferred is not 0
    */
    modifier nonZero() {
        require(msg.value != 0);
        _;
    }

    /*****
    * @dev The constructor function to initialize the Presale
    * @param _token                         address   the address of the ERC20 token for the sale
    * @param _tokenSupply                   uint256   the amount of tokens available
    */
    function DadiMaxCapSale (StandardToken _token,uint256 _tokenSupply) public {
        require(_token != address(0));
        require(_tokenSupply != 0);

        token = StandardToken(_token);
        tokenSupply = _tokenSupply * (uint256(10) ** 18);
    }

    /*****
    * @dev Fallback Function to buy the tokens
    */
    function () public nonZero payable {
        require(state == SaleState.Sale);
        buyTokens(msg.sender, msg.value);
    }

    /*****
    * @dev Allows the contract owner to add a new Sale wallet, used to hold funds safely
    * @param _wallet        address     The address of the wallet
    * @return success       bool        Returns true if executed successfully
    */
    function addSaleWallet (address _wallet) public onlyOwner returns (bool) {
        require(_wallet != address(0));
        saleWallets.push(_wallet);
        return true;
    }

    /*****
    * @dev Allows the contract owner to add multiple whitelist users, each with a wallet address
    * @param userAddresses   address[]     The array of whitelist wallet addresses
    */
    function addWhitelistUsers(address[] userAddresses) public onlyOwner {
        for (uint i = 0; i < userAddresses.length; i++) {
            addWhitelistUser(userAddresses[i]);
        }
    }

    /*****
    * @dev Allows the contract owner to a single whitelist user
    * @param userAddress     address      The wallet address to whitelist
    */
    function addWhitelistUser(address userAddress) public onlyOwner {
        if (!isWhitelisted(userAddress)) {
            whitelisted[userAddress].index = whitelistedIndex.push(userAddress) - 1;
          
            LogNewWhitelistUser(userAddress, whitelisted[userAddress].index);
        }
    }

    /*****
    * @dev Calculates the number of tokens that can be bought for the amount of Wei transferred
    * @param _amount    uint256     The amount of money invested by the investor
    * @return tokens    uint256     The number of tokens purchased for the amount invested
    */
    function calculateTokens (uint256 _amount) public constant returns (uint256 tokens) {
        tokens = _amount * ethRate / saleTokenPrice;
        return tokens;
    }

    /*****
    * @dev Called by the owner of the contract to modify the sale state
    */
    function setState (uint256 _state) public onlyOwner {
        state = SaleState(uint(_state));
        LogStateChange(state);
    }

    /*****
    * @dev Called by the owner of the contract to start the sale
    */
    function startSale () public onlyOwner {
        state = SaleState.Sale;
        LogStateChange(state);
    }

    /*****
    * @dev Called by the owner of the contract to finalize the ICO
    *      and redistribute funds (if any)
    */
    function finalizeSale () public onlyOwner {
        state = SaleState.Success;
        LogStateChange(state);

        // Transfer any ETH to one of the Presale wallets
        if (this.balance > 0) {
            forwardFunds(this.balance);
        }
    }

    /*****
    * @dev Called by the owner of the contract to close the Sale and redistribute any crumbs.
    * @param recipient     address     The address of the recipient of the tokens
    */
    function closeSale (address recipient) public onlyOwner {
        state = SaleState.Closed;
        LogStateChange(state);

        // redistribute unsold tokens to DADI ecosystem
        uint256 remaining = getTokensAvailable();
        updateSaleParameters(remaining);

        if (remaining > 0) {
            token.transfer(recipient, remaining);
            LogRedistributeTokens(recipient, state, remaining);
        }
    }

    /*****
    * @dev Called by the owner of the contract to allow tokens to be distributed
    */
    function setTokenDistribution () public onlyOwner {
        state = SaleState.TokenDistribution;
        LogStateChange(state);
    }

    /*****
    * @dev Called by the owner of the contract to distribute tokens to investors
    * @param _address       address     The address of the investor for which to distribute tokens
    * @return success       bool        Returns true if executed successfully
    */
    function distributeTokens (address _address) public onlyOwner returns (bool) {
        require(state == SaleState.TokenDistribution);
        
        // get the tokens available for the investor
        uint256 tokens = investors[_address].tokens;
        require(tokens > 0);

        require(investors[_address].distributed == false);

        investors[_address].distributed = true;

        token.transfer(_address, tokens);
      
        LogTokenDistribution(_address, tokens);
        return true;
    }

    /*****
    * @dev Called by the owner of the contract to distribute tokens to investors who used a non-ERC20 wallet address
    * @param _purchaseAddress        address     The address the investor used to buy tokens
    * @param _tokenAddress           address     The address to send the tokens to
    * @return success                bool        Returns true if executed successfully
    */
    function distributeToAlternateAddress (address _purchaseAddress, address _tokenAddress) public onlyOwner returns (bool) {
        require(state == SaleState.TokenDistribution);
        
        // get the tokens available for the investor
        uint256 tokens = investors[_purchaseAddress].tokens;
        require(tokens > 0);

        require(investors[_purchaseAddress].distributed == false);
        investors[_purchaseAddress].distributed = true;

        token.transfer(_tokenAddress, tokens);
      
        LogTokenDistribution(_tokenAddress, tokens);
        return true;
    }

    /*****
    * @dev Called by the owner of the contract to redistribute tokens if an investor has been refunded offline
    * @param investorAddress         address     The address the investor used to buy tokens
    * @param recipient               address     The address to send the tokens to
    */
    function redistributeTokens (address investorAddress, address recipient) public onlyOwner {
        uint256 tokens = investors[investorAddress].tokens;
        require(tokens > 0);
        
        // remove tokens, so they can't be redistributed
        require(investors[investorAddress].distributed == false);

        investors[investorAddress].distributed = true;

        token.transfer(recipient, tokens);

        LogRedistributeTokens(recipient, state, tokens);
    }

    /*****
    * @dev Get the amount of PreSale tokens left for purchase
    * @return uint256 the count of tokens available
    */
    function getTokensAvailable () public constant returns (uint256) {
        return tokenSupply - tokensPurchased;
    }

    /*****
    * @dev Get the total count of tokens purchased in all the Sale periods
    * @return uint256 the count of tokens purchased
    */
    function getTokensPurchased () public constant returns (uint256) {
        return tokensPurchased;
    }

    /*****
    * @dev Converts an amount sent in Wei to the equivalent in USD
    * @param _amount      uint256       the amount sent to the contract, in Wei
    * @return uint256  the amount sent to this contract, in USD
    */
    function ethToUsd (uint256 _amount) public constant returns (uint256) {
        return (_amount * ethRate) / (uint256(10) ** 18);
    }

    /*****
    * @dev Get the overall success state of the ICO
    * @return bool whether the state is successful, or not
    */
    function isSuccessful () public constant returns (bool) {
        return state == SaleState.Success;
    }

    /*****
    * @dev Get a whitelisted user
    * @param userAddress      address       the wallet address of the user
    * @return uint     the index of the user
    */
    function getWhitelistUser (address userAddress) public constant returns (uint index) {
        require(isWhitelisted(userAddress));
        return whitelisted[userAddress].index;
    }

    /*****
    * @dev Get count of contributors
    * @return uint     the number of unique contributors
    */
    function getInvestorCount () public constant returns (uint count) {
        return investorIndex.length;
    }


    /*****
    * @dev Get an investor
    * @param _address      address       the wallet address of the investor
    * @return uint256  the amount contributed by the user
    * @return uint256  the number of tokens assigned to the user
    * @return bool     whether the tokens have already been distributed
    * @return uint     the index of the user
    */
    function getInvestor (address _address) public constant returns (uint256 contribution, uint256 tokens, bool distributed, uint index) {
        require(isInvested(_address));
        return(investors[_address].contribution, investors[_address].tokens, investors[_address].distributed, investors[_address].index);
    }

    /*****
    * @dev Get a user's whitelisted state
    * @param userAddress      address       the wallet address of the user
    * @return bool  true if the user is in the whitelist
    */
    function isWhitelisted (address userAddress) internal constant returns (bool isIndeed) {
        if (whitelistedIndex.length == 0) return false;
        return (whitelistedIndex[whitelisted[userAddress].index] == userAddress);
    }

    /*****
    * @dev Get a user's invested state
    * @param _address      address       the wallet address of the user
    * @return bool  true if the user has already contributed
    */
    function isInvested (address _address) internal constant returns (bool isIndeed) {
        if (investorIndex.length == 0) return false;
        return (investorIndex[investors[_address].index] == _address);
    }

    /*****
    * @dev Update a user's invested state
    * @param _address      address       the wallet address of the user
    * @param _value        uint256       the amount contributed in this transaction
    * @param _tokens       uint256       the number of tokens assigned in this transaction
    */
    function addToInvestor(address _address, uint256 _value, uint256 _tokens) internal {
        // add the user to the investorIndex if this is their first contribution
        if (!isInvested(_address)) {
            investors[_address].index = investorIndex.push(_address) - 1;
        }
      
        investors[_address].tokens = investors[_address].tokens.add(_tokens);
        investors[_address].contribution = investors[_address].contribution.add(_value);
    }

    /*****
    * @dev Send ether to the presale collection wallets
    */
    function forwardFunds (uint256 _value) internal {
        uint accountNumber;
        address account;

        // move funds to a random preSaleWallet
        if (saleWallets.length > 0) {
            accountNumber = getRandom(saleWallets.length) - 1;
            account = saleWallets[accountNumber];
            account.transfer(_value);
            LogFundTransfer(account, _value);
        }
    }

    /*****
    * @dev Internal function to assign tokens to the contributor
    * @param _address       address     The address of the contributing investor
    * @param _value         uint256     The amount invested 
    * @return success       bool        Returns true if executed successfully
    */
    function buyTokens (address _address, uint256 _value) internal returns (bool) {
        require(isValidContribution(_address, _value));

        uint256 boughtTokens = calculateTokens(_value);
        require(boughtTokens != 0);

        // if the number of tokens calculated for the given value is 
        // greater than the tokens available, reject the payment
        if (boughtTokens >= getTokensAvailable()) {
            revert();
        }

        // update investor state
        addToInvestor(_address, _value, boughtTokens);

        LogTokenPurchase(msg.sender, _address, _value, boughtTokens);

        forwardFunds(_value);

        updateSaleParameters(boughtTokens);

        return true;
    }

    /*****
    * @dev Check that the user is whitelisted and the amount sent in the transaction is below or equal to the individual cap.
    * Factors in previous transaction by the same user
    * @param _address         address     The address of the user making the transaction
    * @param _amount          uint256     The amount sent in the transaction
    * @return        bool        Returns true if the amount is valid
    */
    function isValidContribution (address _address, uint256 _amount) internal constant returns (bool valid) {
        require(isWhitelisted(_address));

        return isEqualOrBelowCap(_amount + investors[_address].contribution); 
    }

    /*****
    * @dev Check that the amount sent in the transaction is equal to or below the individual cap
    * @param _amount         uint256     The amount sent in the transaction
    * @return        bool        Returns true if the amount is equal to or below the individual cap
    */
    function isEqualOrBelowCap (uint256 _amount) internal constant returns (bool) {
        return ethToUsd(_amount) <= individualCap;
    }

    /*****
    * @dev Generates a random number from 1 to max based on the last block hash
    * @param max     uint  the maximum value 
    * @return a random number
    */
    function getRandom(uint max) internal constant returns (uint randomNumber) {
        return (uint(keccak256(block.blockhash(block.number - 1))) % max) + 1;
    }

    /*****
    * @dev Internal function to modify parameters based on tokens bought
    * @param _tokens        uint256     The number of tokens purchased
    */
    function updateSaleParameters (uint256 _tokens) internal {
        tokensPurchased = tokensPurchased.add(_tokens);
    }
}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[],"name":"individualCap","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_wallet","type":"address"}],"name":"addSaleWallet","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"saleWallets","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"investorAddress","type":"address"},{"name":"recipient","type":"address"}],"name":"redistributeTokens","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"saleTokenPrice","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"finalizeSale","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_purchaseAddress","type":"address"},{"name":"_tokenAddress","type":"address"}],"name":"distributeToAlternateAddress","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"userAddresses","type":"address[]"}],"name":"addWhitelistUsers","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_amount","type":"uint256"}],"name":"calculateTokens","outputs":[{"name":"tokens","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"tokenSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"recipient","type":"address"}],"name":"closeSale","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"userAddress","type":"address"}],"name":"addWhitelistUser","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_address","type":"address"}],"name":"getInvestor","outputs":[{"name":"contribution","type":"uint256"},{"name":"tokens","type":"uint256"},{"name":"distributed","type":"bool"},{"name":"index","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getTokensPurchased","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_amount","type":"uint256"}],"name":"ethToUsd","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getInvestorCount","outputs":[{"name":"count","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"setTokenDistribution","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_state","type":"uint256"}],"name":"setState","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getTokensAvailable","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_address","type":"address"}],"name":"distributeTokens","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"userAddress","type":"address"}],"name":"getWhitelistUser","outputs":[{"name":"index","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"startSale","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"state","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"tokensPurchased","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ethRate","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isSuccessful","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"token","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_token","type":"address"},{"name":"_tokenSupply","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"purchaser","type":"address"},{"indexed":true,"name":"beneficiary","type":"address"},{"indexed":false,"name":"value","type":"uint256"},{"indexed":false,"name":"tokens","type":"uint256"}],"name":"LogTokenPurchase","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"recipient","type":"address"},{"indexed":false,"name":"tokens","type":"uint256"}],"name":"LogTokenDistribution","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"recipient","type":"address"},{"indexed":false,"name":"_state","type":"uint8"},{"indexed":false,"name":"tokens","type":"uint256"}],"name":"LogRedistributeTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"wallet","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"LogFundTransfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"wallet","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"LogRefund","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_state","type":"uint8"}],"name":"LogStateChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"userAddress","type":"address"},{"indexed":false,"name":"index","type":"uint256"}],"name":"LogNewWhitelistUser","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"}]

60606040526000600455624c4b406005556101f46006556211e4506007556000600c60006101000a81548160ff0219169083600581111561003c57fe5b0217905550341561004c57600080fd5b60405160408061274a83398101604052808051906020019091908051906020019091905050336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141515156100ed57600080fd5b600081141515156100fd57600080fd5b81600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506012600a0a810260038190555050506125ee8061015c6000396000f300606060405260043610610175576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680630276650b146101c657806308d9a77b146101ef5780631ccea71b146102405780633d1e215d146102a357806351d28a7e146102fb57806358a687ec14610324578063616d1fab14610339578063686b2812146103a957806371aa60fd146104035780637824407f1461043a578063794913701461046357806384083c891461049c5780638da5cb5b146104d55780638f35a75e1461052a57806391667aef14610590578063946d1480146105b9578063960524e3146105f05780639640639114610619578063a9e966b71461062e578063aaa5ad6114610651578063b1d17c981461067a578063b36c14fe146106cb578063b66a0e5d14610718578063c19d93fb1461072d578063cc4d819c14610764578063d2d93f901461078d578063ec4cd0cf146107b6578063f2fde38b146107e3578063fc0c546a1461081c575b6000341415151561018557600080fd5b6001600581111561019257fe5b600c60009054906101000a900460ff1660058111156101ad57fe5b1415156101b957600080fd5b6101c33334610871565b50005b34156101d157600080fd5b6101d961094e565b6040518082815260200191505060405180910390f35b34156101fa57600080fd5b610226600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610954565b604051808215151515815260200191505060405180910390f35b341561024b57600080fd5b6102616004808035906020019091905050610a59565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156102ae57600080fd5b6102f9600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610a98565b005b341561030657600080fd5b61030e610d84565b6040518082815260200191505060405180910390f35b341561032f57600080fd5b610337610d8a565b005b341561034457600080fd5b61038f600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610ea0565b604051808215151515815260200191505060405180910390f35b34156103b457600080fd5b6104016004808035906020019082018035906020019080806020026020016040519081016040528093929190818152602001838360200280828437820191505050505050919050506111a2565b005b341561040e57600080fd5b610424600480803590602001909190505061123e565b6040518082815260200191505060405180910390f35b341561044557600080fd5b61044d61125c565b6040518082815260200191505060405180910390f35b341561046e57600080fd5b61049a600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611262565b005b34156104a757600080fd5b6104d3600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506114d1565b005b34156104e057600080fd5b6104e861167a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561053557600080fd5b610561600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190505061169f565b604051808581526020018481526020018315151515815260200182815260200194505050505060405180910390f35b341561059b57600080fd5b6105a36117e1565b6040518082815260200191505060405180910390f35b34156105c457600080fd5b6105da60048080359060200190919050506117eb565b6040518082815260200191505060405180910390f35b34156105fb57600080fd5b610603611808565b6040518082815260200191505060405180910390f35b341561062457600080fd5b61062c611815565b005b341561063957600080fd5b61064f60048080359060200190919050506118ea565b005b341561065c57600080fd5b6106646119ca565b6040518082815260200191505060405180910390f35b341561068557600080fd5b6106b1600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506119d8565b604051808215151515815260200191505060405180910390f35b34156106d657600080fd5b610702600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611cd9565b6040518082815260200191505060405180910390f35b341561072357600080fd5b61072b611d39565b005b341561073857600080fd5b610740611e0e565b6040518082600581111561075057fe5b60ff16815260200191505060405180910390f35b341561076f57600080fd5b610777611e21565b6040518082815260200191505060405180910390f35b341561079857600080fd5b6107a0611e27565b6040518082815260200191505060405180910390f35b34156107c157600080fd5b6107c9611e2d565b604051808215151515815260200191505060405180910390f35b34156107ee57600080fd5b61081a600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611e5d565b005b341561082757600080fd5b61082f611fb2565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60008061087e8484611fd8565b151561088957600080fd5b6108928361123e565b9050600081141515156108a457600080fd5b6108ac6119ca565b811015156108b957600080fd5b6108c4848483612043565b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167ff370ff51765588b4b12b4ccf319b865dd3499a57df818acfe82c2740e41c878d8584604051808381526020018281526020019250505060405180910390a361093a83612239565b6109438161234b565b600191505092915050565b60055481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156109b157600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141515156109ed57600080fd5b60028054806001018281610a019190612571565b9160005260206000209001600084909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505060019050919050565b600281815481101515610a6857fe5b90600052602060002090016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610af557600080fd5b600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001549050600081111515610b4957600080fd5b60001515600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160009054906101000a900460ff161515141515610bab57600080fd5b6001600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160006101000a81548160ff021916908315150217905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1515610cd357600080fd5b6102c65a03f11515610ce457600080fd5b50505060405180519050507f8a1bda63f5f60920a84caac25ec9eb9f26a6c01e1682229db0268c5a5c92453482600c60009054906101000a900460ff1683604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001836005811115610d6457fe5b60ff168152602001828152602001935050505060405180910390a1505050565b60065481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610de557600080fd5b6003600c60006101000a81548160ff02191690836005811115610e0457fe5b02179055507fc33408924c47a75c436c6caca09732b718f7c974a19cebe04dc816a990d0c174600c60009054906101000a900460ff1660405180826005811115610e4a57fe5b60ff16815260200191505060405180910390a160003073ffffffffffffffffffffffffffffffffffffffff16311115610e9e57610e9d3073ffffffffffffffffffffffffffffffffffffffff1631612239565b5b565b6000806000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610efe57600080fd5b60046005811115610f0b57fe5b600c60009054906101000a900460ff166005811115610f2657fe5b141515610f3257600080fd5b600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001549050600081111515610f8657600080fd5b60001515600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160009054906101000a900460ff161515141515610fe857600080fd5b6001600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160006101000a81548160ff021916908315150217905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84836000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b151561111057600080fd5b6102c65a03f1151561112157600080fd5b50505060405180519050507f388b9f37b6cbb3a30ba34c69072e43e77eb3714381366d456e84dcd1430968678382604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a1600191505092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156111ff57600080fd5b600090505b815181101561123a5761122d828281518110151561121e57fe5b906020019060200201516114d1565b8080600101915050611204565b5050565b6000600654600754830281151561125157fe5b049050809050919050565b60035481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156112bf57600080fd5b6005600c60006101000a81548160ff021916908360058111156112de57fe5b02179055507fc33408924c47a75c436c6caca09732b718f7c974a19cebe04dc816a990d0c174600c60009054906101000a900460ff166040518082600581111561132457fe5b60ff16815260200191505060405180910390a161133f6119ca565b905061134a8161234b565b60008111156114cd57600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b151561142057600080fd5b6102c65a03f1151561143157600080fd5b50505060405180519050507f8a1bda63f5f60920a84caac25ec9eb9f26a6c01e1682229db0268c5a5c92453482600c60009054906101000a900460ff1683604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018360058111156114b157fe5b60ff168152602001828152602001935050505060405180910390a15b5050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561152c57600080fd5b61153581612369565b1515611677576001600980548060010182816115519190612571565b9160005260206000209001600084909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555003600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055508073ffffffffffffffffffffffffffffffffffffffff167f1bd9a7e7f2c7d47fdcf280cee37c606400dc98cb991e442dbb81ce8a8a2e0e74600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546040518082815260200191505060405180910390a25b50565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806000806116ae85612434565b15156116b957600080fd5b600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154600a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160009054906101000a900460ff16600a60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206003015493509350935093509193509193565b6000600454905090565b60006012600a0a600754830281151561180057fe5b049050919050565b6000600b80549050905090565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561187057600080fd5b6004600c60006101000a81548160ff0219169083600581111561188f57fe5b02179055507fc33408924c47a75c436c6caca09732b718f7c974a19cebe04dc816a990d0c174600c60009054906101000a900460ff16604051808260058111156118d557fe5b60ff16815260200191505060405180910390a1565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561194557600080fd5b80600581111561195157fe5b600c60006101000a81548160ff0219169083600581111561196e57fe5b02179055507fc33408924c47a75c436c6caca09732b718f7c974a19cebe04dc816a990d0c174600c60009054906101000a900460ff16604051808260058111156119b457fe5b60ff16815260200191505060405180910390a150565b600060045460035403905090565b6000806000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611a3657600080fd5b60046005811115611a4357fe5b600c60009054906101000a900460ff166005811115611a5e57fe5b141515611a6a57600080fd5b600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001549050600081111515611abe57600080fd5b60001515600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160009054906101000a900460ff161515141515611b2057600080fd5b6001600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160006101000a81548160ff021916908315150217905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84836000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1515611c4857600080fd5b6102c65a03f11515611c5957600080fd5b50505060405180519050507f388b9f37b6cbb3a30ba34c69072e43e77eb3714381366d456e84dcd1430968678382604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a16001915050919050565b6000611ce482612369565b1515611cef57600080fd5b600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001549050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611d9457600080fd5b6001600c60006101000a81548160ff02191690836005811115611db357fe5b02179055507fc33408924c47a75c436c6caca09732b718f7c974a19cebe04dc816a990d0c174600c60009054906101000a900460ff1660405180826005811115611df957fe5b60ff16815260200191505060405180910390a1565b600c60009054906101000a900460ff1681565b60045481565b60075481565b600060036005811115611e3c57fe5b600c60009054906101000a900460ff166005811115611e5757fe5b14905090565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611eb857600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515611ef457600080fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611fe383612369565b1515611fee57600080fd5b61203b600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015483016124ff565b905092915050565b61204c83612434565b15156120fe576001600b80548060010182816120689190612571565b9160005260206000209001600086909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555003600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600301819055505b61215381600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015461251690919063ffffffff16565b600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055506121ee82600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015461251690919063ffffffff16565b600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010181905550505050565b6000806000600280549050111561234657600161225a600280549050612534565b03915060028281548110151561226c57fe5b906000526020600020900160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f1935050505015156122da57600080fd5b7f35c019e24e057e2b74358b61c59c75be70dc488b1c5f97fd5b9dfe58f6df04e88184604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a15b505050565b6123608160045461251690919063ffffffff16565b60048190555050565b6000806009805490501415612381576000905061242f565b8173ffffffffffffffffffffffffffffffffffffffff166009600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001548154811015156123e957fe5b906000526020600020900160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161490505b919050565b600080600b80549050141561244c57600090506124fa565b8173ffffffffffffffffffffffffffffffffffffffff16600b600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600301548154811015156124b457fe5b906000526020600020900160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161490505b919050565b600060055461250d836117eb565b11159050919050565b600080828401905083811015151561252a57fe5b8091505092915050565b6000600182600143034060405180826000191660001916815260200191505060405180910390206001900481151561256857fe5b06019050919050565b81548183558181151161259857818360005260206000209182019101612597919061259d565b5b505050565b6125bf91905b808211156125bb5760008160009055506001016125a3565b5090565b905600a165627a7a723058204bfea5431de3dbcd3fc77d6964b6d9e7169c1e18752a83c73b0ed1b59bfc6e290029000000000000000000000000fb2f26f266fb2805a387230f2aa0a331b4d96fba0000000000000000000000000000000000000000000000000000000000588040

Deployed Bytecode

0x606060405260043610610175576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680630276650b146101c657806308d9a77b146101ef5780631ccea71b146102405780633d1e215d146102a357806351d28a7e146102fb57806358a687ec14610324578063616d1fab14610339578063686b2812146103a957806371aa60fd146104035780637824407f1461043a578063794913701461046357806384083c891461049c5780638da5cb5b146104d55780638f35a75e1461052a57806391667aef14610590578063946d1480146105b9578063960524e3146105f05780639640639114610619578063a9e966b71461062e578063aaa5ad6114610651578063b1d17c981461067a578063b36c14fe146106cb578063b66a0e5d14610718578063c19d93fb1461072d578063cc4d819c14610764578063d2d93f901461078d578063ec4cd0cf146107b6578063f2fde38b146107e3578063fc0c546a1461081c575b6000341415151561018557600080fd5b6001600581111561019257fe5b600c60009054906101000a900460ff1660058111156101ad57fe5b1415156101b957600080fd5b6101c33334610871565b50005b34156101d157600080fd5b6101d961094e565b6040518082815260200191505060405180910390f35b34156101fa57600080fd5b610226600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610954565b604051808215151515815260200191505060405180910390f35b341561024b57600080fd5b6102616004808035906020019091905050610a59565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156102ae57600080fd5b6102f9600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610a98565b005b341561030657600080fd5b61030e610d84565b6040518082815260200191505060405180910390f35b341561032f57600080fd5b610337610d8a565b005b341561034457600080fd5b61038f600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610ea0565b604051808215151515815260200191505060405180910390f35b34156103b457600080fd5b6104016004808035906020019082018035906020019080806020026020016040519081016040528093929190818152602001838360200280828437820191505050505050919050506111a2565b005b341561040e57600080fd5b610424600480803590602001909190505061123e565b6040518082815260200191505060405180910390f35b341561044557600080fd5b61044d61125c565b6040518082815260200191505060405180910390f35b341561046e57600080fd5b61049a600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611262565b005b34156104a757600080fd5b6104d3600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506114d1565b005b34156104e057600080fd5b6104e861167a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561053557600080fd5b610561600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190505061169f565b604051808581526020018481526020018315151515815260200182815260200194505050505060405180910390f35b341561059b57600080fd5b6105a36117e1565b6040518082815260200191505060405180910390f35b34156105c457600080fd5b6105da60048080359060200190919050506117eb565b6040518082815260200191505060405180910390f35b34156105fb57600080fd5b610603611808565b6040518082815260200191505060405180910390f35b341561062457600080fd5b61062c611815565b005b341561063957600080fd5b61064f60048080359060200190919050506118ea565b005b341561065c57600080fd5b6106646119ca565b6040518082815260200191505060405180910390f35b341561068557600080fd5b6106b1600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506119d8565b604051808215151515815260200191505060405180910390f35b34156106d657600080fd5b610702600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611cd9565b6040518082815260200191505060405180910390f35b341561072357600080fd5b61072b611d39565b005b341561073857600080fd5b610740611e0e565b6040518082600581111561075057fe5b60ff16815260200191505060405180910390f35b341561076f57600080fd5b610777611e21565b6040518082815260200191505060405180910390f35b341561079857600080fd5b6107a0611e27565b6040518082815260200191505060405180910390f35b34156107c157600080fd5b6107c9611e2d565b604051808215151515815260200191505060405180910390f35b34156107ee57600080fd5b61081a600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611e5d565b005b341561082757600080fd5b61082f611fb2565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60008061087e8484611fd8565b151561088957600080fd5b6108928361123e565b9050600081141515156108a457600080fd5b6108ac6119ca565b811015156108b957600080fd5b6108c4848483612043565b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167ff370ff51765588b4b12b4ccf319b865dd3499a57df818acfe82c2740e41c878d8584604051808381526020018281526020019250505060405180910390a361093a83612239565b6109438161234b565b600191505092915050565b60055481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156109b157600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141515156109ed57600080fd5b60028054806001018281610a019190612571565b9160005260206000209001600084909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505060019050919050565b600281815481101515610a6857fe5b90600052602060002090016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610af557600080fd5b600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001549050600081111515610b4957600080fd5b60001515600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160009054906101000a900460ff161515141515610bab57600080fd5b6001600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160006101000a81548160ff021916908315150217905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1515610cd357600080fd5b6102c65a03f11515610ce457600080fd5b50505060405180519050507f8a1bda63f5f60920a84caac25ec9eb9f26a6c01e1682229db0268c5a5c92453482600c60009054906101000a900460ff1683604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001836005811115610d6457fe5b60ff168152602001828152602001935050505060405180910390a1505050565b60065481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610de557600080fd5b6003600c60006101000a81548160ff02191690836005811115610e0457fe5b02179055507fc33408924c47a75c436c6caca09732b718f7c974a19cebe04dc816a990d0c174600c60009054906101000a900460ff1660405180826005811115610e4a57fe5b60ff16815260200191505060405180910390a160003073ffffffffffffffffffffffffffffffffffffffff16311115610e9e57610e9d3073ffffffffffffffffffffffffffffffffffffffff1631612239565b5b565b6000806000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610efe57600080fd5b60046005811115610f0b57fe5b600c60009054906101000a900460ff166005811115610f2657fe5b141515610f3257600080fd5b600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001549050600081111515610f8657600080fd5b60001515600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160009054906101000a900460ff161515141515610fe857600080fd5b6001600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160006101000a81548160ff021916908315150217905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84836000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b151561111057600080fd5b6102c65a03f1151561112157600080fd5b50505060405180519050507f388b9f37b6cbb3a30ba34c69072e43e77eb3714381366d456e84dcd1430968678382604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a1600191505092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156111ff57600080fd5b600090505b815181101561123a5761122d828281518110151561121e57fe5b906020019060200201516114d1565b8080600101915050611204565b5050565b6000600654600754830281151561125157fe5b049050809050919050565b60035481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156112bf57600080fd5b6005600c60006101000a81548160ff021916908360058111156112de57fe5b02179055507fc33408924c47a75c436c6caca09732b718f7c974a19cebe04dc816a990d0c174600c60009054906101000a900460ff166040518082600581111561132457fe5b60ff16815260200191505060405180910390a161133f6119ca565b905061134a8161234b565b60008111156114cd57600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b151561142057600080fd5b6102c65a03f1151561143157600080fd5b50505060405180519050507f8a1bda63f5f60920a84caac25ec9eb9f26a6c01e1682229db0268c5a5c92453482600c60009054906101000a900460ff1683604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018360058111156114b157fe5b60ff168152602001828152602001935050505060405180910390a15b5050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561152c57600080fd5b61153581612369565b1515611677576001600980548060010182816115519190612571565b9160005260206000209001600084909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555003600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055508073ffffffffffffffffffffffffffffffffffffffff167f1bd9a7e7f2c7d47fdcf280cee37c606400dc98cb991e442dbb81ce8a8a2e0e74600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546040518082815260200191505060405180910390a25b50565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806000806116ae85612434565b15156116b957600080fd5b600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154600a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160009054906101000a900460ff16600a60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206003015493509350935093509193509193565b6000600454905090565b60006012600a0a600754830281151561180057fe5b049050919050565b6000600b80549050905090565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561187057600080fd5b6004600c60006101000a81548160ff0219169083600581111561188f57fe5b02179055507fc33408924c47a75c436c6caca09732b718f7c974a19cebe04dc816a990d0c174600c60009054906101000a900460ff16604051808260058111156118d557fe5b60ff16815260200191505060405180910390a1565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561194557600080fd5b80600581111561195157fe5b600c60006101000a81548160ff0219169083600581111561196e57fe5b02179055507fc33408924c47a75c436c6caca09732b718f7c974a19cebe04dc816a990d0c174600c60009054906101000a900460ff16604051808260058111156119b457fe5b60ff16815260200191505060405180910390a150565b600060045460035403905090565b6000806000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611a3657600080fd5b60046005811115611a4357fe5b600c60009054906101000a900460ff166005811115611a5e57fe5b141515611a6a57600080fd5b600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001549050600081111515611abe57600080fd5b60001515600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160009054906101000a900460ff161515141515611b2057600080fd5b6001600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160006101000a81548160ff021916908315150217905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84836000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1515611c4857600080fd5b6102c65a03f11515611c5957600080fd5b50505060405180519050507f388b9f37b6cbb3a30ba34c69072e43e77eb3714381366d456e84dcd1430968678382604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a16001915050919050565b6000611ce482612369565b1515611cef57600080fd5b600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001549050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611d9457600080fd5b6001600c60006101000a81548160ff02191690836005811115611db357fe5b02179055507fc33408924c47a75c436c6caca09732b718f7c974a19cebe04dc816a990d0c174600c60009054906101000a900460ff1660405180826005811115611df957fe5b60ff16815260200191505060405180910390a1565b600c60009054906101000a900460ff1681565b60045481565b60075481565b600060036005811115611e3c57fe5b600c60009054906101000a900460ff166005811115611e5757fe5b14905090565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611eb857600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515611ef457600080fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611fe383612369565b1515611fee57600080fd5b61203b600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015483016124ff565b905092915050565b61204c83612434565b15156120fe576001600b80548060010182816120689190612571565b9160005260206000209001600086909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555003600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600301819055505b61215381600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015461251690919063ffffffff16565b600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055506121ee82600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015461251690919063ffffffff16565b600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010181905550505050565b6000806000600280549050111561234657600161225a600280549050612534565b03915060028281548110151561226c57fe5b906000526020600020900160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f1935050505015156122da57600080fd5b7f35c019e24e057e2b74358b61c59c75be70dc488b1c5f97fd5b9dfe58f6df04e88184604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a15b505050565b6123608160045461251690919063ffffffff16565b60048190555050565b6000806009805490501415612381576000905061242f565b8173ffffffffffffffffffffffffffffffffffffffff166009600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001548154811015156123e957fe5b906000526020600020900160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161490505b919050565b600080600b80549050141561244c57600090506124fa565b8173ffffffffffffffffffffffffffffffffffffffff16600b600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600301548154811015156124b457fe5b906000526020600020900160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161490505b919050565b600060055461250d836117eb565b11159050919050565b600080828401905083811015151561252a57fe5b8091505092915050565b6000600182600143034060405180826000191660001916815260200191505060405180910390206001900481151561256857fe5b06019050919050565b81548183558181151161259857818360005260206000209182019101612597919061259d565b5b505050565b6125bf91905b808211156125bb5760008160009055506001016125a3565b5090565b905600a165627a7a723058204bfea5431de3dbcd3fc77d6964b6d9e7169c1e18752a83c73b0ed1b59bfc6e290029

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

000000000000000000000000fb2f26f266fb2805a387230f2aa0a331b4d96fba0000000000000000000000000000000000000000000000000000000000588040

-----Decoded View---------------
Arg [0] : _token (address): 0xFb2f26F266Fb2805a387230f2aa0a331b4d96Fba
Arg [1] : _tokenSupply (uint256): 5800000

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000fb2f26f266fb2805a387230f2aa0a331b4d96fba
Arg [1] : 0000000000000000000000000000000000000000000000000000000000588040


Swarm Source

bzzr://4bfea5431de3dbcd3fc77d6964b6d9e7169c1e18752a83c73b0ed1b59bfc6e29

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.