Contract Overview
Balance: 0 Ether
Ether Value: $0
Transactions: 435 txns
Misc:
Address Watch: Add To Watch List
Contract Creator: 0xee7c5c46ed7499983c3fa1e77d8ff5bab3742b48at txn 0x369be756a89e6629ee0ea2dea9954246a35b1ffba18343e6df58cecc75c8e235
 Latest 25 transactions from a total of 435 transactions

TxHash Age From To Value [TxFee]
0xf04037d24d4883e08eff2843774e4912e9a1ce64177ecfdf1e1d0e689115dd482 days 13 hrs ago0x7b561373b0c377123934c1379f07b04c01d02e82  IN   0xf70244b3c872aada7fc30ff04cc9d153a354fa000 Ether0.000342096
0xd79ea2511b1d586c531a3aaa745a97f74776964f6ed3c8945a9887d2343b16882 days 13 hrs ago0x7b561373b0c377123934c1379f07b04c01d02e82  IN   0xf70244b3c872aada7fc30ff04cc9d153a354fa000 Ether0.000252096
0x28ad2045d7ca5c43046d2e03b6a89fe6f127b1854112efa8379ff041c6ac36bc3 days 1 hr ago0x7b561373b0c377123934c1379f07b04c01d02e82  IN   0xf70244b3c872aada7fc30ff04cc9d153a354fa000 Ether0.000343548
0xa0250c6166cf067bec0b1eb42b24076625ed216544a16bc799b33df4a2e9161e3 days 1 hr ago0x7b561373b0c377123934c1379f07b04c01d02e82  IN   0xf70244b3c872aada7fc30ff04cc9d153a354fa000 Ether0.000343548
0x9fc77028728b5086be6a2194cff3c170cad4d6d9f228008088dae7d6f8c4843c3 days 1 hr ago0x7b561373b0c377123934c1379f07b04c01d02e82  IN   0xf70244b3c872aada7fc30ff04cc9d153a354fa000 Ether0.000343548
0x01504bf72b95de859ac0a677c9a1732339754e5bb39c637dea198a6b35680b763 days 1 hr ago0x7b561373b0c377123934c1379f07b04c01d02e82  IN   0xf70244b3c872aada7fc30ff04cc9d153a354fa000 Ether0.000343548
0xd8492e3180c902899402bb55876478c3a83d0a49a6ce3385e43fb3595c213dd03 days 1 hr ago0x7b561373b0c377123934c1379f07b04c01d02e82  IN   0xf70244b3c872aada7fc30ff04cc9d153a354fa000 Ether0.000343548
0x64e1a7589d8d2ac25280560ed733d8bc319d07dcb00c75ddf0b357e2c268a2e23 days 5 hrs ago0x1fb1b65b70344f7afdc3afea1542e339c6dc02ce  IN   0xf70244b3c872aada7fc30ff04cc9d153a354fa000 Ether0.000171048
0x22e3fa8c9f807d18c210ee5f4f66974c86d8b8d1ec27fe7912665990861ad7f63 days 5 hrs ago0x1fb1b65b70344f7afdc3afea1542e339c6dc02ce  IN   0xf70244b3c872aada7fc30ff04cc9d153a354fa000 Ether0.000513144
0x2d1d7285a7f37b8efb85e1d202610736b93c01867415c1ae5eed90694b37e16d3 days 7 hrs ago0x1e98dc67c042a9a71e120229908e456021b48b76  IN   0xf70244b3c872aada7fc30ff04cc9d153a354fa000 Ether0.00028629
0x024d6e3c0d30f3f6f38256d1938f1edd727591708f9febe15c19acfa25f2ff453 days 7 hrs ago0x1e98dc67c042a9a71e120229908e456021b48b76  IN   0xf70244b3c872aada7fc30ff04cc9d153a354fa000 Ether0.00028508
0x7069b3e03b0c506fcacbf7c3c96faec1dce22649275ccfe40870f609e8f55f0d3 days 7 hrs ago0x1e98dc67c042a9a71e120229908e456021b48b76  IN   0xf70244b3c872aada7fc30ff04cc9d153a354fa000 Ether0.00024907
0x8d8f9c79dfb49745fc786c14849880a3c56d5c565c5a374fc5f21a6e897a29e83 days 9 hrs ago0xbece5877b385be9307822ba6db81c91699bd92dc  IN   0xf70244b3c872aada7fc30ff04cc9d153a354fa000 Ether0.000253548
0xa4bec41616f15a6b87e595605ffd291796dc357b4c5628e965584e83842a8f423 days 10 hrs ago0xd37e02e628ff1b929fa6d27b0e93ad4578d27baa  IN   0xf70244b3c872aada7fc30ff04cc9d153a354fa000 Ether0.00021008
0xef2db47661b621eaf2514ff46bc1a4a3b457a18f790db1cf35780e1c5c09fac53 days 10 hrs ago0xbece5877b385be9307822ba6db81c91699bd92dc  IN   0xf70244b3c872aada7fc30ff04cc9d153a354fa000 Ether0.000252096
0x161b770947ad23bd5a00d34671fc39969004ae3668fbe9d1815471c03bc4fe493 days 10 hrs ago0x5897b6ffe7bb88c7455afd33eb498b026ea2b154  IN   0xf70244b3c872aada7fc30ff04cc9d153a354fa000 Ether0.000135065
0x861b5536a5309a2103dd7c865df1ed8b14974eac165a4b305ad63ac691b5e7743 days 11 hrs ago0x3d50d0545b70c3663a5dc638d1ee2c90b10a001d  IN   0xf70244b3c872aada7fc30ff04cc9d153a354fa000 Ether0.00057016
0x8b1ce819013720467bdaa867430a44b2e8c84e4957f534873a3e03d584aa0eca3 days 20 hrs ago0x177003e56d2d54302ca243f18f37a2d71dcacc1b  IN   0xf70244b3c872aada7fc30ff04cc9d153a354fa000 Ether0.000160716
0xe8f29092c5773cc2341d746b0c94641221729000f8c775f1391fc3e726fb78a33 days 20 hrs ago0x177003e56d2d54302ca243f18f37a2d71dcacc1b  IN   0xf70244b3c872aada7fc30ff04cc9d153a354fa000 Ether0.000160908
0x5a20988b02dda7fbff67a71d78050cf3d40cbc40729fc92a5cf04c7e89b6389e3 days 20 hrs ago0x177003e56d2d54302ca243f18f37a2d71dcacc1b  IN   0xf70244b3c872aada7fc30ff04cc9d153a354fa000 Ether0.000138
0x97ae777824a9734d1fe86b2947be5699c0d2df3de0231f117023b3f0f1d155f53 days 21 hrs ago0xd37e02e628ff1b929fa6d27b0e93ad4578d27baa  IN   0xf70244b3c872aada7fc30ff04cc9d153a354fa000 Ether0.00013696
0x876666c887b484bb02517e026e33f614d4c64761b61f86a36de36ad31999c7843 days 21 hrs ago0xd37e02e628ff1b929fa6d27b0e93ad4578d27baa  IN   0xf70244b3c872aada7fc30ff04cc9d153a354fa000 Ether0.00013696
0x201c2b074926050d5457e7962e6cc8a2226597936c31109585744adc247ec1903 days 23 hrs ago0xffe1ce2814116b47b5f4d20a208b773dcc1fef20  IN   0xf70244b3c872aada7fc30ff04cc9d153a354fa000 Ether0.000627176
0xd08c9b2caad930ea025677d7c44fc4e1f34cc6f367f13369440401296bf7cccb4 days 13 mins ago0xa95f3f1e0fa156f8754c2d8dd8d99c292ef57e96  IN   0xf70244b3c872aada7fc30ff04cc9d153a354fa000 Ether0.000171048
0x1f0445f872c082a793df5fde6561e2d4bd809deb49226a5238b83ee292c945fd4 days 15 mins ago0xa95f3f1e0fa156f8754c2d8dd8d99c292ef57e96  IN   0xf70244b3c872aada7fc30ff04cc9d153a354fa000 Ether0.000126048
[ Download CSV Export  ] 
 Internal Transactions as a result of Contract Execution
 Latest 7 Internal Transactions

ParentTxHash Block Age From To Value
0x4698b9ae9a6ddbfb35f87b7394cfc51ad1a0702efb8f893a317fe2a09677d5da6282419139 days 23 hrs ago0xf70244b3c872aada7fc30ff04cc9d153a354fa000xecf73f060d4d45161e1c1d7a9f92aafe8a18f0360.1 Ether
0x7acdf9f694970b8bee00350b7cb8ca8371db6d0dbaa7fa764b9e70686ba7a1a76276331140 days 23 hrs ago0xf70244b3c872aada7fc30ff04cc9d153a354fa000xecf73f060d4d45161e1c1d7a9f92aafe8a18f0360.1 Ether
0xda514065247bd6d321ab97fa81540b1a5a501a948cb5fb8f98c56fda71acc1a56276305140 days 23 hrs ago0xf70244b3c872aada7fc30ff04cc9d153a354fa000xecf73f060d4d45161e1c1d7a9f92aafe8a18f0360.1 Ether
0x8bb822c8fd19c04e4e341243492ae03d5a1b42806b5b3168c0d901623fed27966223234149 days 22 hrs ago0xf70244b3c872aada7fc30ff04cc9d153a354fa000xecf73f060d4d45161e1c1d7a9f92aafe8a18f0360.1 Ether
0xa867a64a47c2e1eb2ba70f6f9c1c4bfdeaae5e40c1e905ca5ee4e6819e0714cf6215053151 days 7 hrs ago0xf70244b3c872aada7fc30ff04cc9d153a354fa000xecf73f060d4d45161e1c1d7a9f92aafe8a18f0360.1 Ether
0xa94b5e02f1023e7d531aaa7866c504fede85b24b186f785f597916b504ebb1326212053151 days 19 hrs ago0xf70244b3c872aada7fc30ff04cc9d153a354fa000xecf73f060d4d45161e1c1d7a9f92aafe8a18f0360.1 Ether
0xc56cf7cddb570dfc4010b98458f88561ca0895500d552f3a17690432259267ed5460642281 days 8 hrs ago0xf70244b3c872aada7fc30ff04cc9d153a354fa00  Contract Creation0 Ether
[ Download CSV Export  ] 
Warning: The Compiled Contract might be susceptible to ExpExponentCleanup (medium/high-severity), EventStructWrongData (very low-severity), NestedArrayFunctionCallDecoder (medium-severity) SolidityCompiler Bugs.

Contract Source Code Verified (Exact Match)
Contract Name: ACATokenSale
Compiler Text: v0.4.21+commit.dfe3193c
Optimization Enabled: Yes
Runs (Optimiser):  200



  Contract Source Code   Find Similiar Contracts

pragma solidity ^0.4.19;

/**
 * @title SafeMath
 * @dev Math operations with safety checks that throw on error
 */
library SafeMath {

  /**
  * @dev Multiplies two numbers, throws on overflow.
  */
  function mul(uint256 a, uint256 b) internal pure returns (uint256) {
    if (a == 0) {
      return 0;
    }
    uint256 c = a * b;
    assert(c / a == b);
    return c;
  }

  /**
  * @dev Integer division of two numbers, truncating the quotient.
  */
  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;
  }

  /**
  * @dev Substracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend).
  */
  function sub(uint256 a, uint256 b) internal pure returns (uint256) {
    assert(b <= a);
    return a - b;
  }

  /**
  * @dev Adds two numbers, throws on overflow.
  */
  function add(uint256 a, uint256 b) internal pure returns (uint256) {
    uint256 c = a + b;
    assert(c >= a);
    return c;
  }
}

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) public onlyOwner {
    require(newOwner != address(0));
    OwnershipTransferred(owner, newOwner);
    owner = newOwner;
  }

}

/**
 * @title RefundVault
 * @dev This contract is used for storing funds while a crowdsale
 * is in progress. Supports refunding the money if crowdsale fails,
 * and forwarding it if crowdsale is successful.
 */
contract RefundVault is Ownable {
  using SafeMath for uint256;

  enum State { Active, Refunding, Closed }

  mapping (address => uint256) public deposited;
  address public wallet;
  State public state;

  event Closed();
  event RefundsEnabled();
  event Refunded(address indexed beneficiary, uint256 weiAmount);

  /**
   * @param _wallet Vault address
   */
  function RefundVault(address _wallet) public {
    require(_wallet != address(0));
    wallet = _wallet;
    state = State.Active;
  }

  /**
   * @param investor Investor address
   */
  function deposit(address investor) onlyOwner public payable {
    require(state == State.Active);
    deposited[investor] = deposited[investor].add(msg.value);
  }

  function close() onlyOwner public {
    require(state == State.Active);
    state = State.Closed;
    Closed();
    wallet.transfer(this.balance);
  }

  function enableRefunds() onlyOwner public {
    require(state == State.Active);
    state = State.Refunding;
    RefundsEnabled();
  }

  /**
   * @param investor Investor address
   */
  function refund(address investor) public {
    require(state == State.Refunding);
    uint256 depositedValue = deposited[investor];
    deposited[investor] = 0;
    investor.transfer(depositedValue);
    Refunded(investor, depositedValue);
  }
}

contract ERC20Basic {
  function totalSupply() public view returns (uint256);
  function balanceOf(address who) public view returns (uint256);
  function transfer(address to, uint256 value) public returns (bool);
  event Transfer(address indexed from, address indexed to, uint256 value);
}

contract ERC20 is ERC20Basic {
  function allowance(address owner, address spender) public view 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);
}

contract ACAToken is ERC20 {
    using SafeMath for uint256;

    address public owner;
    address public admin;
    address public saleAddress;

    string public name = "ACA Network Token";
    string public symbol = "ACA";
    uint8 public decimals = 18;

    uint256 totalSupply_;
    mapping (address => mapping (address => uint256)) internal allowed;
    mapping (address => uint256) balances;

    bool transferable = false;
    mapping (address => bool) internal transferLocked;

    event Genesis(address owner, uint256 value);
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    event AdminTransferred(address indexed previousAdmin, address indexed newAdmin);
    event Burn(address indexed burner, uint256 value);
    event LogAddress(address indexed addr);
    event LogUint256(uint256 value);
    event TransferLock(address indexed target, bool value);

    // modifiers
    modifier onlyOwner() {
        require(msg.sender == owner);
        _;
    }

    modifier onlyAdmin() {
        require(msg.sender == owner || msg.sender == admin);
        _;
    }

    modifier canTransfer(address _from, address _to) {
        require(_to != address(0x0));
        require(_to != address(this));

        if ( _from != owner && _from != admin ) {
            require(transferable);
            require (!transferLocked[_from]);
        }
        _;
    }

    // constructor
    function ACAToken(uint256 _totalSupply, address _saleAddress, address _admin) public {
        require(_totalSupply > 0);
        owner = msg.sender;
        require(_saleAddress != address(0x0));
        require(_saleAddress != address(this));
        require(_saleAddress != owner);

        require(_admin != address(0x0));
        require(_admin != address(this));
        require(_admin != owner);

        require(_admin != _saleAddress);

        admin = _admin;
        saleAddress = _saleAddress;

        totalSupply_ = _totalSupply;

        balances[owner] = totalSupply_;
        approve(saleAddress, totalSupply_);

        emit Genesis(owner, totalSupply_);
    }

    // permission related
    function transferOwnership(address newOwner) public onlyOwner {
        require(newOwner != address(0));
        require(newOwner != address(this));
        require(newOwner != admin);

        owner = newOwner;
        emit OwnershipTransferred(owner, newOwner);
    }

    function transferAdmin(address _newAdmin) public onlyOwner {
        require(_newAdmin != address(0));
        require(_newAdmin != address(this));
        require(_newAdmin != owner);

        admin = _newAdmin;
        emit AdminTransferred(admin, _newAdmin);
    }

    function setTransferable(bool _transferable) public onlyAdmin {
        transferable = _transferable;
    }

    function isTransferable() public view returns (bool) {
        return transferable;
    }

    function transferLock() public returns (bool) {
        transferLocked[msg.sender] = true;
        emit TransferLock(msg.sender, true);
        return true;
    }

    function manageTransferLock(address _target, bool _value) public onlyAdmin returns (bool) {
        transferLocked[_target] = _value;
        emit TransferLock(_target, _value);
        return true;
    }

    function transferAllowed(address _target) public view returns (bool) {
        return (transferable && transferLocked[_target] == false);
    }

    // token related
    function totalSupply() public view returns (uint256) {
        return totalSupply_;
    }

    function transfer(address _to, uint256 _value) canTransfer(msg.sender, _to) public returns (bool) {
        require(_value <= balances[msg.sender]);

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

    function balanceOf(address _owner) public view returns (uint256 balance) {
        return balances[_owner];
    }

    function balanceOfOwner() public view returns (uint256 balance) {
        return balances[owner];
    }

    function transferFrom(address _from, address _to, uint256 _value) public canTransfer(_from, _to) returns (bool) {
        require(_value <= balances[_from]);
        require(_value <= allowed[_from][msg.sender]);

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

    function approve(address _spender, uint256 _value) public canTransfer(msg.sender, _spender) returns (bool) {
        allowed[msg.sender][_spender] = _value;
        emit Approval(msg.sender, _spender, _value);
        return true;
    }

    function allowance(address _owner, address _spender) public view returns (uint256) {
        return allowed[_owner][_spender];
    }

    function increaseApproval(address _spender, uint _addedValue) public canTransfer(msg.sender, _spender) returns (bool) {
        allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue);
        emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
        return true;
    }

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

    function burn(uint256 _value) public {
        require(_value <= balances[msg.sender]);
        // no need to require value <= totalSupply, since that would imply the
        // sender's balance is greater than the totalSupply, which *should* be an assertion failure

        address burner = msg.sender;
        balances[burner] = balances[burner].sub(_value);
        totalSupply_ = totalSupply_.sub(_value);
        emit Burn(burner, _value);
    }

    function emergencyERC20Drain(ERC20 _token, uint256 _amount) public onlyOwner {
        _token.transfer(owner, _amount);
    }
}

contract ACATokenSale {
    using SafeMath for uint256;

    address public owner;
    address public admin;

    address public wallet;
    ACAToken public token;

    uint256 totalSupply;

    struct StageInfo {
        uint256 opening;
        uint256 closing;
        uint256 capacity;
        uint256 minimumWei;
        uint256 maximumWei;
        uint256 rate;
        uint256 sold;
    }
    bool public tokenSaleEnabled = false;

    mapping(address => bool) public whitelist;
    mapping(address => bool) public kyclist;
    mapping(address => bool) public whitelistBonus;

    uint256 public whitelistBonusClosingTime;
    uint256 public whitelistBonusSent = 0;
    uint256 public whitelistBonusRate;
    uint256 public whitelistBonusAmount;

    mapping (address => uint256) public sales;
    uint256 public softCap;
    uint256 public hardCap;
    uint256 public weiRaised = 0;

    RefundVault public vault;

    mapping (address => address) public referrals;
    uint256 public referralAmount;
    uint256 public referralRateInviter;
    uint256 public referralRateInvitee;
    uint256 public referralSent = 0;
    bool public referralDone = false;

    mapping (address => uint256) public bounties;
    uint256 public bountyAmount;
    uint256 public bountySent = 0;

    StageInfo[] public stages;
    uint256 public currentStage = 0;

    bool public isFinalized = false;
    bool public isClaimable = false;

    // events
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    event AdminTransferred(address indexed previousAdmin, address indexed newAdmin);
    event TokenSaleCreated(address indexed wallet, uint256 totalSupply);
    event StageAdded(uint256 openingTime, uint256 closingTime, uint256 capacity, uint256 minimumWei, uint256 maximumWei, uint256 rate);
    event TokenSaleEnabled();

    event WhitelistUpdated(address indexed beneficiary, bool flag);
    event VerificationUpdated(address indexed beneficiary, bool flag);
    event BulkWhitelistUpdated(address[] beneficiary, bool flag);
    event BulkVerificationUpdated(address[] beneficiary, bool flag);

    event TokenPurchase(address indexed purchaser, address indexed beneficiary, uint256 value, uint256 amount);
    event TokenClaimed(address indexed beneficiary, uint256 amount);
    event Finalized();
    event BountySetupDone();
    event BountyUpdated(address indexed target, bool flag, uint256 amount);
    event PurchaseReferral(address indexed beneficiary, uint256 amount);
    event StageUpdated(uint256 stage);
    event StageCapReached(uint256 stage);
    event ReferralCapReached();

    // do not use this on mainnet!
    event LogAddress(address indexed addr);
    event LogUint256(uint256 value);

    // modifiers
    modifier onlyOwner() {
        require(msg.sender == owner);
        _;
    }

    modifier onlyAdmin() {
        require(msg.sender == owner || msg.sender == admin);
        _;
    }

    modifier onlyWhileOpen {
        require(tokenSaleEnabled == true);
        require(now >= stages[currentStage].opening && now <= stages[currentStage].closing);
        _;
    }

    modifier isVerified(address _beneficiary) {
        require(whitelist[_beneficiary] == true);
        require(kyclist[_beneficiary] == true);
        _;
    }

    modifier claimable {
        require(isFinalized == true || isClaimable == true);
        require(isGoalReached());
        _;
    }

    // getters
    function isEnabled() public view returns (bool) {
        return tokenSaleEnabled;
    }

    function isClosed() public view returns (bool) {
        return now > stages[stages.length - 1].closing;
    }

    function isGoalReached() public view returns (bool) {
        return getTotalTokenSold() >= softCap;
    }

    function getTotalTokenSold() public view returns (uint256) {
        uint256 sold = 0;
        for ( uint i = 0; i < stages.length; ++i ) {
            sold = sold.add(stages[i].sold);
        }

        return sold;
    }

    function getOpeningTime() public view returns (uint256) {
        return stages[currentStage].opening;
    }

    function getOpeningTimeByStage(uint _index) public view returns (uint256) {
        require(_index < stages.length);
        return stages[_index].opening;
    }

    function getClosingTime() public view returns (uint256) {
        return stages[currentStage].closing;
    }

    function getClosingTimeByStage(uint _index) public view returns (uint256) {
        require(_index < stages.length);
        return stages[_index].closing;
    }

    function getCurrentCapacity() public view returns (uint256) {
        return stages[currentStage].capacity;
    }

    function getCapacity(uint _index) public view returns (uint256) {
        require(_index < stages.length);
        return stages[_index].capacity;
    }

    function getCurrentSold() public view returns (uint256) {
        return stages[currentStage].sold;
    }

    function getSold(uint _index) public view returns (uint256) {
        require(_index < stages.length);
        return stages[_index].sold;
    }

    function getCurrentRate() public view returns (uint256) {
        return stages[currentStage].rate;
    }

    function getRate(uint _index) public view returns (uint256) {
        require(_index < stages.length);
        return stages[_index].rate;
    }

    function getRateWithoutBonus() public view returns (uint256) {
        return stages[stages.length - 1].rate;
    }

    function getSales(address _beneficiary) public view returns (uint256) {
        return sales[_beneficiary];
    }
    
    // setter
    function setSalePeriod(uint _index, uint256 _openingTime, uint256 _closingTime) onlyOwner public {
        require(_openingTime > now);
        require(_closingTime > _openingTime);

        require(_index > currentStage);
        require(_index < stages.length);

        stages[_index].opening = _openingTime;        
        stages[_index].closing = _closingTime;        
    }

    function setRate(uint _index, uint256 _rate) onlyOwner public {
        require(_index > currentStage);
        require(_index < stages.length);

        require(_rate > 0);

        stages[_index].rate = _rate;
    }

    function setCapacity(uint _index, uint256 _capacity) onlyOwner public {
        require(_index > currentStage);
        require(_index < stages.length);

        require(_capacity > 0);

        stages[_index].capacity = _capacity;
    }

    function setClaimable(bool _claimable) onlyOwner public {
        if ( _claimable == true ) {
            require(isGoalReached());
        }

        isClaimable = _claimable;
    }

    function addPrivateSale(uint256 _amount) onlyOwner public {
        require(currentStage == 0);
        require(_amount > 0);
        require(_amount < stages[0].capacity.sub(stages[0].sold));

        stages[0].sold = stages[0].sold.add(_amount);
    }

    function subPrivateSale(uint256 _amount) onlyOwner public {
        require(currentStage == 0);
        require(_amount > 0);
        require(stages[0].sold > _amount);

        stages[0].sold = stages[0].sold.sub(_amount);
    }

    // permission
    function setAdmin(address _newAdmin) public onlyOwner {
        require(_newAdmin != address(0x0));
        require(_newAdmin != address(this));
        require(_newAdmin != owner);

        emit AdminTransferred(admin, _newAdmin);
        admin = _newAdmin;
    }

    function transferOwnership(address newOwner) public onlyOwner {
        require(newOwner != address(0));
        require(newOwner != address(this));
        emit OwnershipTransferred(owner, newOwner);
        owner = newOwner;
    }

    // constructor
    function ACATokenSale(
        address _wallet, 
        address _admin,
        uint256 _totalSupply,
        uint256 _softCap,
        uint256 _hardCap) public {
        owner = msg.sender;

        require(_admin != address(0));
        require(_wallet != address(0));

        require(_totalSupply > 0);
        require(_softCap > 0);
        require(_hardCap > _softCap);

        admin = _admin;
        wallet = _wallet;

        totalSupply = _totalSupply;
        softCap = _softCap;
        hardCap = _hardCap;

        emit TokenSaleCreated(wallet, _totalSupply);
    }

    // state related
    function setupBounty(
        uint256 _referralAmount,
        uint256 _referralRateInviter,
        uint256 _referralRateInvitee,
        uint256 _bountyAmount,
        uint256 _whitelistBonusClosingTime,
        uint256 _whitelistBonusRate,
        uint256 _whitelistBonusAmount
    ) onlyOwner public {
        
        require(_referralAmount > 0);

        require(_referralRateInviter > 0 && _referralRateInviter < 100);
        require(_referralRateInvitee > 0 && _referralRateInvitee < 100);

        require(_whitelistBonusClosingTime > now);
        require(_whitelistBonusRate > 0);
        require(_whitelistBonusAmount > _whitelistBonusRate);
        require(_bountyAmount > 0);

        referralAmount = _referralAmount;
        referralRateInviter = _referralRateInviter;
        referralRateInvitee = _referralRateInvitee;
        bountyAmount = _bountyAmount;
        whitelistBonusClosingTime = _whitelistBonusClosingTime;
        whitelistBonusRate = _whitelistBonusRate;
        whitelistBonusAmount = _whitelistBonusAmount;

        emit BountySetupDone();
    }
    function addStage(
        uint256 _openingTime, 
        uint256 _closingTime, 
        uint256 _capacity, 
        uint256 _minimumWei, 
        uint256 _maximumWei, 
        uint256 _rate) onlyOwner public {
        require(tokenSaleEnabled == false);

        // require(_openingTime > now);
        require(_closingTime > _openingTime);

        require(_capacity > 0);
        require(_capacity < hardCap);

        require(_minimumWei > 0);
        require(_maximumWei >= _minimumWei);

        require(_rate > 0);

        require(_minimumWei.mul(_rate) < _capacity);
        require(_maximumWei.mul(_rate) < _capacity);
        if ( stages.length > 0 ) {
            StageInfo memory prevStage = stages[stages.length - 1];
            require(_openingTime > prevStage.closing);
        }

        stages.push(StageInfo(_openingTime, _closingTime, _capacity, _minimumWei, _maximumWei, _rate, 0));

        emit StageAdded(_openingTime, _closingTime, _capacity, _minimumWei, _maximumWei, _rate);
    }

    function setToken(ACAToken _token) onlyOwner public {
        token = _token;
    }

    function enableTokenSale() onlyOwner public returns (bool) {
        require(stages.length > 0);

        vault = new RefundVault(wallet);

        tokenSaleEnabled = true;
        emit TokenSaleEnabled();
        return true;
    }

    function updateStage() public returns (uint256) {
        require(tokenSaleEnabled == true);
        require(currentStage < stages.length);
        require(now >= stages[currentStage].opening);

        uint256 remains = stages[currentStage].capacity.sub(stages[currentStage].sold);
        if ( now > stages[currentStage].closing ) {
            uint256 nextStage = currentStage.add(1);
            if ( remains > 0 && nextStage < stages.length ) {
                stages[nextStage].capacity = stages[nextStage].capacity.add(remains);
                remains = stages[nextStage].capacity;
            }

            currentStage = nextStage;
            emit StageUpdated(nextStage);
        }

        return remains;
    }

    function finalize() onlyOwner public {
        require(isFinalized == false);
        require(isClosed());

        finalization();
        emit Finalized();

        isFinalized = true;
    }

    function finalization() internal {
        if (isGoalReached()) {
            vault.close();
        } else {
            vault.enableRefunds();
        }

    }

    // transaction
    function () public payable {
        buyTokens(msg.sender);
    }

    function buyTokens(address _beneficiary) public payable {
        uint256 weiAmount = msg.value;

        _preValidatePurchase(_beneficiary, weiAmount);
        // calculate token amount to be created
        uint256 tokens = _getTokenAmount(weiAmount);

        // update state
        weiRaised = weiRaised.add(weiAmount);

        _processPurchase(_beneficiary, tokens);
        emit TokenPurchase(msg.sender, _beneficiary, weiAmount, tokens);

        _updatePurchasingState(_beneficiary, weiAmount);

        _forwardFunds();
        _postValidatePurchase(_beneficiary, weiAmount);
    }

    function _getTokenAmount(uint256 _weiAmount) internal view returns (uint256) {
        return _weiAmount.mul(getCurrentRate());
    }

    function _getTokenAmountWithoutBonus(uint256 _weiAmount) internal view returns (uint256) {
        return _weiAmount.mul(getRateWithoutBonus());
    }

    function _preValidatePurchase(address _beneficiary, uint256 _weiAmount) internal isVerified(_beneficiary) {
        require(_beneficiary != address(0));
        require(_weiAmount != 0);

        require(tokenSaleEnabled == true);

        require(now >= stages[currentStage].opening);

        // lazy execution
        uint256 remains = updateStage();

        require(currentStage < stages.length);
        require(now >= stages[currentStage].opening && now <= stages[currentStage].closing);

        require(_weiAmount >= stages[currentStage].minimumWei);
        require(_weiAmount <= stages[currentStage].maximumWei);

        uint256 amount = _getTokenAmount(_weiAmount);

        require(remains > amount);
    }

    function _postValidatePurchase(address _beneficiary, uint256 _weiAmount) internal {
        if ( getCurrentSold() == getCurrentCapacity() ) {
            currentStage = currentStage.add(1);
            emit StageUpdated(currentStage);
        }
    }

    function _deliverTokens(address _beneficiary, uint256 _tokenAmount) internal {
        if ( isClaimable ) {
            token.transferFrom(owner, _beneficiary, _tokenAmount);
        }
        else {
            sales[_beneficiary] = sales[_beneficiary].add(_tokenAmount);
        }
    }

    function _processPurchase(address _beneficiary, uint256 _tokenAmount) internal {

        stages[currentStage].sold = stages[currentStage].sold.add(_tokenAmount);
        _deliverTokens(_beneficiary, _tokenAmount);

        uint256 weiAmount = msg.value;
        address inviter = referrals[_beneficiary];
        if ( inviter != address(0x0) && referralDone == false ) {
            uint256 baseRate = _getTokenAmountWithoutBonus(weiAmount);
            uint256 referralAmountInviter = baseRate.div(100).mul(referralRateInviter);
            uint256 referralAmountInvitee = baseRate.div(100).mul(referralRateInvitee);
            uint256 referralRemains = referralAmount.sub(referralSent);
            if ( referralRemains == 0 ) {
                referralDone = true;
            }
            else {
                if ( referralAmountInviter >= referralRemains ) {
                    referralAmountInviter = referralRemains;
                    referralAmountInvitee = 0; // priority to inviter
                    emit ReferralCapReached();
                    referralDone = true;
                }
                if ( referralDone == false && referralAmountInviter >= referralRemains ) {
                    referralAmountInvitee = referralRemains.sub(referralAmountInviter);
                    emit ReferralCapReached();
                    referralDone = true;
                }

                uint256 referralAmountTotal = referralAmountInviter.add(referralAmountInvitee);
                referralSent = referralSent.add(referralAmountTotal);

                if ( referralAmountInviter > 0 ) {
                    _deliverTokens(inviter, referralAmountInviter);
                    emit PurchaseReferral(inviter, referralAmountInviter);
                }
                if ( referralAmountInvitee > 0 ) {
                    _deliverTokens(_beneficiary, referralAmountInvitee);
                    emit PurchaseReferral(_beneficiary, referralAmountInvitee);
                }
            }
        }
    }

    function _updatePurchasingState(address _beneficiary, uint256 _weiAmount) internal {
        // optional override
    }

    function _forwardFunds() internal {
        vault.deposit.value(msg.value)(msg.sender);
    }

    // claim
    function claimToken() public claimable isVerified(msg.sender) returns (bool) {
        address beneficiary = msg.sender;
        uint256 amount = sales[beneficiary];

        emit TokenClaimed(beneficiary, amount);

        sales[beneficiary] = 0;
        return token.transferFrom(owner, beneficiary, amount);
    }

    function claimRefund() isVerified(msg.sender) public {
        require(isFinalized == true);
        require(!isGoalReached());

        vault.refund(msg.sender);
    }

    function claimBountyToken() public claimable isVerified(msg.sender) returns (bool) {
        address beneficiary = msg.sender;
        uint256 amount = bounties[beneficiary];

        emit TokenClaimed(beneficiary, amount);

        bounties[beneficiary] = 0;
        return token.transferFrom(owner, beneficiary, amount);
    }

    // bounty
    function addBounty(address _address, uint256 _amount) public onlyAdmin isVerified(_address) returns (bool) {
        require(bountyAmount.sub(bountySent) >= _amount);

        bountySent = bountySent.add(_amount);
        bounties[_address] = bounties[_address].add(_amount);
        emit BountyUpdated(_address, true, _amount);
    }
    function delBounty(address _address, uint256 _amount) public onlyAdmin isVerified(_address) returns (bool) {
        require(bounties[_address] >= _amount);
        require(_amount >= bountySent);

        bountySent = bountySent.sub(_amount);
        bounties[_address] = bounties[_address].sub(_amount);
        emit BountyUpdated(_address, false, _amount);
    }
    function getBountyAmount(address _address) public view returns (uint256) {
        return bounties[_address];
    }

    // referral
    function addReferral(address _inviter, address _invitee) public onlyAdmin isVerified(_inviter) isVerified(_invitee) returns (bool) {
        referrals[_invitee] = _inviter;
    }
    function delReferral(address _inviter, address _invitee) public onlyAdmin isVerified(_inviter) isVerified(_invitee) returns (bool) {
        delete referrals[_invitee];
    }
    function getReferral(address _address) public view returns (address) {
        return referrals[_address];
    }

    // whitelist
    function _deliverWhitelistBonus(address _beneficiary) internal {
        if ( _beneficiary == address(0x0) ) {
            return;
        }

        if ( whitelistBonus[_beneficiary] == true ) {
            return;
        }
        
        if (whitelistBonusAmount.sub(whitelistBonusSent) > whitelistBonusRate ) {
            whitelistBonus[_beneficiary] = true;

            whitelistBonusSent = whitelistBonusSent.add(whitelistBonusRate);
            bounties[_beneficiary] = bounties[_beneficiary].add(whitelistBonusRate);
            emit BountyUpdated(_beneficiary, true, whitelistBonusRate);
        }
    }
    function isAccountWhitelisted(address _beneficiary) public view returns (bool) {
        return whitelist[_beneficiary];
    }

    function addToWhitelist(address _beneficiary) external onlyAdmin {
        whitelist[_beneficiary] = true;

        if ( whitelistBonus[_beneficiary] == false && now < whitelistBonusClosingTime ) {
            _deliverWhitelistBonus(_beneficiary);
        }

        emit WhitelistUpdated(_beneficiary, true);
    }

    function addManyToWhitelist(address[] _beneficiaries) external onlyAdmin {
        uint256 i = 0;
        if ( now < whitelistBonusClosingTime ) {
            for (i = 0; i < _beneficiaries.length; i++) {
                whitelist[_beneficiaries[i]] = true;
                _deliverWhitelistBonus(_beneficiaries[i]);
            }
            return;
        }

        for (i = 0; i < _beneficiaries.length; i++) {
            whitelist[_beneficiaries[i]] = true;
        }

        emit BulkWhitelistUpdated(_beneficiaries, true);
    }

    function removeFromWhitelist(address _beneficiary) external onlyAdmin {
        whitelist[_beneficiary] = false;

        emit WhitelistUpdated(_beneficiary, false);
    }

    // kyc
    function isAccountVerified(address _beneficiary) public view returns (bool) {
        return kyclist[_beneficiary];
    }

    function setAccountVerified(address _beneficiary) external onlyAdmin {
        kyclist[_beneficiary] = true;

        emit VerificationUpdated(_beneficiary, true);
    }

    function setManyAccountsVerified(address[] _beneficiaries) external onlyAdmin {
        for (uint256 i = 0; i < _beneficiaries.length; i++) {
            kyclist[_beneficiaries[i]] = true;
        }

        emit BulkVerificationUpdated(_beneficiaries, true);
    }

    function unverifyAccount(address _beneficiary) external onlyAdmin {
        kyclist[_beneficiary] = false;

        emit VerificationUpdated(_beneficiary, false);
    }
}

    Contract ABI  
[{"constant":true,"inputs":[],"name":"whitelistBonusSent","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_inviter","type":"address"},{"name":"_invitee","type":"address"}],"name":"addReferral","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getCurrentSold","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_token","type":"address"}],"name":"setToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"claimBountyToken","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"whitelistBonusClosingTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_index","type":"uint256"}],"name":"getOpeningTimeByStage","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"referralSent","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getTotalTokenSold","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getClosingTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_claimable","type":"bool"}],"name":"setClaimable","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"enableTokenSale","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_address","type":"address"}],"name":"getReferral","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_index","type":"uint256"}],"name":"getClosingTimeByStage","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"weiRaised","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"claimToken","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_index","type":"uint256"},{"name":"_rate","type":"uint256"}],"name":"setRate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"finalize","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_referralAmount","type":"uint256"},{"name":"_referralRateInviter","type":"uint256"},{"name":"_referralRateInvitee","type":"uint256"},{"name":"_bountyAmount","type":"uint256"},{"name":"_whitelistBonusClosingTime","type":"uint256"},{"name":"_whitelistBonusRate","type":"uint256"},{"name":"_whitelistBonusAmount","type":"uint256"}],"name":"setupBounty","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"wallet","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"whitelistBonusAmount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_index","type":"uint256"}],"name":"getRate","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_amount","type":"uint256"}],"name":"subPrivateSale","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_address","type":"address"},{"name":"_amount","type":"uint256"}],"name":"delBounty","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_inviter","type":"address"},{"name":"_invitee","type":"address"}],"name":"delReferral","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"currentStage","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getRateWithoutBonus","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"whitelistBonusRate","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isEnabled","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"referralAmount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newAdmin","type":"address"}],"name":"setAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"isClaimable","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"stages","outputs":[{"name":"opening","type":"uint256"},{"name":"closing","type":"uint256"},{"name":"capacity","type":"uint256"},{"name":"minimumWei","type":"uint256"},{"name":"maximumWei","type":"uint256"},{"name":"rate","type":"uint256"},{"name":"sold","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_beneficiary","type":"address"}],"name":"isAccountWhitelisted","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_address","type":"address"},{"name":"_amount","type":"uint256"}],"name":"addBounty","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_beneficiary","type":"address"}],"name":"removeFromWhitelist","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_beneficiary","type":"address"}],"name":"isAccountVerified","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_beneficiaries","type":"address[]"}],"name":"addManyToWhitelist","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"isFinalized","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"softCap","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_beneficiary","type":"address"}],"name":"setAccountVerified","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"bountySent","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"tokenSaleEnabled","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"whitelist","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"referrals","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getCurrentCapacity","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"claimRefund","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_index","type":"uint256"}],"name":"getCapacity","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"updateStage","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_address","type":"address"}],"name":"getBountyAmount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isClosed","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_beneficiary","type":"address"}],"name":"unverifyAccount","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"sales","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"bountyAmount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_amount","type":"uint256"}],"name":"addPrivateSale","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"bounties","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isGoalReached","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getOpeningTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"referralDone","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"kyclist","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"referralRateInviter","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"referralRateInvitee","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_index","type":"uint256"},{"name":"_capacity","type":"uint256"}],"name":"setCapacity","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_openingTime","type":"uint256"},{"name":"_closingTime","type":"uint256"},{"name":"_capacity","type":"uint256"},{"name":"_minimumWei","type":"uint256"},{"name":"_maximumWei","type":"uint256"},{"name":"_rate","type":"uint256"}],"name":"addStage","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_beneficiaries","type":"address[]"}],"name":"setManyAccountsVerified","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_beneficiary","type":"address"}],"name":"getSales","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_beneficiary","type":"address"}],"name":"addToWhitelist","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"whitelistBonus","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_beneficiary","type":"address"}],"name":"buyTokens","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_index","type":"uint256"},{"name":"_openingTime","type":"uint256"},{"name":"_closingTime","type":"uint256"}],"name":"setSalePeriod","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getCurrentRate","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"admin","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"hardCap","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"vault","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"token","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_index","type":"uint256"}],"name":"getSold","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_wallet","type":"address"},{"name":"_admin","type":"address"},{"name":"_totalSupply","type":"uint256"},{"name":"_softCap","type":"uint256"},{"name":"_hardCap","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousAdmin","type":"address"},{"indexed":true,"name":"newAdmin","type":"address"}],"name":"AdminTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"wallet","type":"address"},{"indexed":false,"name":"totalSupply","type":"uint256"}],"name":"TokenSaleCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"openingTime","type":"uint256"},{"indexed":false,"name":"closingTime","type":"uint256"},{"indexed":false,"name":"capacity","type":"uint256"},{"indexed":false,"name":"minimumWei","type":"uint256"},{"indexed":false,"name":"maximumWei","type":"uint256"},{"indexed":false,"name":"rate","type":"uint256"}],"name":"StageAdded","type":"event"},{"anonymous":false,"inputs":[],"name":"TokenSaleEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"beneficiary","type":"address"},{"indexed":false,"name":"flag","type":"bool"}],"name":"WhitelistUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"beneficiary","type":"address"},{"indexed":false,"name":"flag","type":"bool"}],"name":"VerificationUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"beneficiary","type":"address[]"},{"indexed":false,"name":"flag","type":"bool"}],"name":"BulkWhitelistUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"beneficiary","type":"address[]"},{"indexed":false,"name":"flag","type":"bool"}],"name":"BulkVerificationUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"purchaser","type":"address"},{"indexed":true,"name":"beneficiary","type":"address"},{"indexed":false,"name":"value","type":"uint256"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"TokenPurchase","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"beneficiary","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"TokenClaimed","type":"event"},{"anonymous":false,"inputs":[],"name":"Finalized","type":"event"},{"anonymous":false,"inputs":[],"name":"BountySetupDone","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"target","type":"address"},{"indexed":false,"name":"flag","type":"bool"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"BountyUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"beneficiary","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"PurchaseReferral","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"stage","type":"uint256"}],"name":"StageUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"stage","type":"uint256"}],"name":"StageCapReached","type":"event"},{"anonymous":false,"inputs":[],"name":"ReferralCapReached","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"addr","type":"address"}],"name":"LogAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"value","type":"uint256"}],"name":"LogUint256","type":"event"}]

  Contract Creation Code Switch To Opcodes View
60606040526005805460ff199081169091556000600a8190556010819055601681905560178054909216909155601a819055601c55601d805461ffff1916905534156200004b57600080fd5b60405160a08062003d1c833981016040528080519190602001805191906020018051919060200180519190602001805160008054600160a060020a03191633600160a060020a0390811691909117909155909250851615159050620000af57600080fd5b600160a060020a0385161515620000c557600080fd5b60008311620000d357600080fd5b60008211620000e157600080fd5b818111620000ee57600080fd5b60018054600160a060020a03808716600160a060020a03199283161790925560028054888416921691909117908190556004859055600e849055600f839055167f481b5185767db188561146464c5ed74c16b5d1c565a5a22f09d5af9dedcd4dc28460405190815260200160405180910390a25050505050613ba680620001766000396000f300606060405260043610620003c55763ffffffff60e060020a600035041663084a40118114620003d25780630b5c3f8714620003fa5780630b9ea6c81462000436578063144fa6d7146200044c57806314aa0eaa146200046e5780631720684a14620004845780631f5c6f67146200049a5780631fb8875d14620004b35780632ecd702014620004c95780632f9cb9aa14620004df578063378c93ad14620004f557806339a13fb314620005105780633b0f0f2f14620005265780633bc578fe14620005645780634042b66f146200057d5780634451d89f146200059357806346df2ccb14620005a95780634bb278f314620005c557806351eecc2314620005db578063521eb273146200060657806356a765c4146200061c5780635776409414620006325780635830f2ea146200064b57806358f6a7db14620006645780635a93bf7114620006895780635bf5d54c14620006b15780635c06d88014620006c757806368db96a614620006dd5780636aa633b614620006f35780636bd68a8f1462000709578063704b6c02146200071f57806374478bb31462000741578063845ddcb214620007575780638907e78714620007ae578063899a1e3614620007d05780638ab1d68114620007f55780638ba209b614620008175780638c10671c14620008395780638d4e4083146200085a5780638da5cb5b1462000870578063906a26e014620008865780639075f124146200089c57806390c3229514620008be578063979cf82414620008d45780639b19251a14620008ea5780639ca423b3146200090c578063aba89198146200092e578063b5545a3c1462000944578063bcd5349f146200095a578063c062f5781462000973578063c1c35e8d1462000989578063c2b6b58c14620009ab578063c2db26fc14620009c1578063c6b9f06a14620009e3578063ccd331bf1462000a05578063cd132aad1462000a1b578063cdfbea581462000a34578063d3eb6f611462000a56578063d74635731462000a6c578063d7ea39c61462000a82578063d8b99cb21462000a98578063dbce1ff71462000aba578063dedeb3ca1462000ad0578063dee2b0581462000ae6578063df6ee6b71462000b02578063e071681d1462000b2a578063e16bd3b71462000b4b578063e43252d71462000b6d578063e6af8f0d1462000b8f578063ec8ac4d81462000bb1578063ec9723ad1462000bc7578063f2fde38b1462000be6578063f7fb07b01462000c08578063f851a4401462000c1e578063fb86a4041462000c34578063fbfa77cf1462000c4a578063fc0c546a1462000c60578063ff5977901462000c76575b620003d03362000c8f565b005b3415620003de57600080fd5b620003e862000d45565b60405190815260200160405180910390f35b34156200040657600080fd5b62000422600160a060020a036004358116906024351662000d4b565b604051901515815260200160405180910390f35b34156200044257600080fd5b620003e862000e75565b34156200045857600080fd5b620003d0600160a060020a036004351662000ea1565b34156200047a57600080fd5b6200042262000eec565b34156200049057600080fd5b620003e862001086565b3415620004a657600080fd5b620003e86004356200108c565b3415620004bf57600080fd5b620003e8620010c6565b3415620004d557600080fd5b620003e8620010cc565b3415620004eb57600080fd5b620003e862001123565b34156200050157600080fd5b620003d060043515156200114e565b34156200051c57600080fd5b62000422620011a6565b34156200053257600080fd5b62000548600160a060020a03600435166200127d565b604051600160a060020a03909116815260200160405180910390f35b34156200057057600080fd5b620003e86004356200129b565b34156200058957600080fd5b620003e8620012d5565b34156200059f57600080fd5b62000422620012db565b3415620005b557600080fd5b620003d060043560243562001456565b3415620005d157600080fd5b620003d0620014c8565b3415620005e757600080fd5b620003d060043560243560443560643560843560a43560c43562001550565b34156200061257600080fd5b6200054862001642565b34156200062857600080fd5b620003e862001651565b34156200063e57600080fd5b620003e860043562001657565b34156200065757600080fd5b620003d060043562001691565b34156200067057600080fd5b62000422600160a060020a036004351660243562001759565b34156200069557600080fd5b62000422600160a060020a0360043581169060243516620018c6565b3415620006bd57600080fd5b620003e8620019ea565b3415620006d357600080fd5b620003e8620019f0565b3415620006e957600080fd5b620003e862001a1e565b3415620006ff57600080fd5b6200042262001a24565b34156200071557600080fd5b620003e862001a2d565b34156200072b57600080fd5b620003d0600160a060020a036004351662001a33565b34156200074d57600080fd5b6200042262001b0e565b34156200076357600080fd5b6200077060043562001b1c565b60405196875260208701959095526040808701949094526060860192909252608085015260a084015260c083019190915260e0909101905180910390f35b3415620007ba57600080fd5b62000422600160a060020a036004351662001b6d565b3415620007dc57600080fd5b62000422600160a060020a036004351660243562001b8b565b34156200080157600080fd5b620003d0600160a060020a036004351662001ce9565b34156200082357600080fd5b62000422600160a060020a036004351662001d79565b34156200084557600080fd5b620003d0600480356024810191013562001d97565b34156200086657600080fd5b6200042262001f26565b34156200087c57600080fd5b6200054862001f2f565b34156200089257600080fd5b620003e862001f3e565b3415620008a857600080fd5b620003d0600160a060020a036004351662001f44565b3415620008ca57600080fd5b620003e862001fd9565b3415620008e057600080fd5b6200042262001fdf565b3415620008f657600080fd5b62000422600160a060020a036004351662001fe8565b34156200091857600080fd5b62000548600160a060020a036004351662001ffd565b34156200093a57600080fd5b620003e862002018565b34156200095057600080fd5b620003d062002043565b34156200096657600080fd5b620003e86004356200212a565b34156200097f57600080fd5b620003e862002164565b34156200099557600080fd5b620003e8600160a060020a036004351662002335565b3415620009b757600080fd5b6200042262002350565b3415620009cd57600080fd5b620003d0600160a060020a036004351662002380565b3415620009ef57600080fd5b620003e8600160a060020a03600435166200240f565b341562000a1157600080fd5b620003e862002421565b341562000a2757600080fd5b620003d060043562002427565b341562000a4057600080fd5b620003e8600160a060020a0360043516620024da565b341562000a6257600080fd5b62000422620024ec565b341562000a7857600080fd5b620003e862002502565b341562000a8e57600080fd5b620004226200252d565b341562000aa457600080fd5b62000422600160a060020a036004351662002536565b341562000ac657600080fd5b620003e86200254b565b341562000adc57600080fd5b620003e862002551565b341562000af257600080fd5b620003d060043560243562002557565b341562000b0e57600080fd5b620003d060043560243560443560643560843560a435620025c9565b341562000b3657600080fd5b620003d060048035602481019101356200282b565b341562000b5757600080fd5b620003e8600160a060020a036004351662002924565b341562000b7957600080fd5b620003d0600160a060020a03600435166200293f565b341562000b9b57600080fd5b62000422600160a060020a036004351662002a0b565b620003d0600160a060020a036004351662000c8f565b341562000bd357600080fd5b620003d060043560243560443562002a20565b341562000bf257600080fd5b620003d0600160a060020a036004351662002ac2565b341562000c1457600080fd5b620003e862002b81565b341562000c2a57600080fd5b6200054862002b95565b341562000c4057600080fd5b620003e862002ba4565b341562000c5657600080fd5b6200054862002baa565b341562000c6c57600080fd5b6200054862002bb9565b341562000c8257600080fd5b620003e860043562002bc8565b34600062000c9e838362002c02565b62000ca98262002dcd565b60105490915062000cc1908363ffffffff62002df116565b60105562000cd0838262002e0c565b82600160a060020a031633600160a060020a03167f623b3804fa71d67900d064613da8f94b9617215ee90799290593e1745087ad18848460405191825260208201526040908101905180910390a362000d2a8383620030b7565b62000d34620030bb565b62000d4083836200310c565b505050565b600a5481565b6000805433600160a060020a039081169116148062000d78575060015433600160a060020a039081169116145b151562000d8457600080fd5b600160a060020a038316600090815260066020526040902054839060ff16151560011462000db157600080fd5b600160a060020a03811660009081526007602052604090205460ff16151560011462000ddc57600080fd5b600160a060020a038316600090815260066020526040902054839060ff16151560011462000e0957600080fd5b600160a060020a03811660009081526007602052604090205460ff16151560011462000e3457600080fd5b5050600160a060020a039182166000908152601260205260409020805473ffffffffffffffffffffffffffffffffffffffff19169390921692909217905590565b6000601b601c5481548110151562000e8957fe5b90600052602060002090600702016006015490505b90565b60005433600160a060020a0390811691161462000ebd57600080fd5b6003805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b601d546000908190819060ff1615156001148062000f175750601d5460ff6101009091041615156001145b151562000f2357600080fd5b62000f2d620024ec565b151562000f3957600080fd5b600160a060020a033390811660009081526006602052604090205460ff16151560011462000f6657600080fd5b600160a060020a03811660009081526007602052604090205460ff16151560011462000f9157600080fd5b33600160a060020a0381166000818152601860205260409081902054929550919350907fe42df0d9493dfd0d7f69902c895b94c190a53e8c27876a86f45e7c997d9d8f7c9084905190815260200160405180910390a2600160a060020a038084166000908152601860205260408082208290556003549154918316926323b872dd921690869086905160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b15156200106757600080fd5b5af115156200107557600080fd5b505050604051805194505050505090565b60095481565b601b5460009082106200109e57600080fd5b601b805483908110620010ad57fe5b9060005260206000209060070201600001549050919050565b60165481565b600080805b601b548110156200111d5762001112601b82815481101515620010f057fe5b9060005260206000209060070201600601548362002df190919063ffffffff16565b9150600101620010d1565b50919050565b6000601b601c548154811015156200113757fe5b906000526020600020906007020160010154905090565b60005433600160a060020a039081169116146200116a57600080fd5b600181151514156200118c5762001180620024ec565b15156200118c57600080fd5b601d80549115156101000261ff0019909216919091179055565b6000805433600160a060020a03908116911614620011c357600080fd5b601b5460009011620011d457600080fd5b600254600160a060020a0316620011ea620034af565b600160a060020a039091168152602001604051809103906000f08015156200121157600080fd5b6011805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03929092169190911790556005805460ff191660011790557f887e7ccf5673eef45a5c69179950777b13841a28f0db61febac61f2b8e729de460405160405180910390a150600190565b600160a060020a039081166000908152601260205260409020541690565b601b546000908210620012ad57600080fd5b601b805483908110620012bc57fe5b9060005260206000209060070201600101549050919050565b60105481565b601d546000908190819060ff16151560011480620013065750601d5460ff6101009091041615156001145b15156200131257600080fd5b6200131c620024ec565b15156200132857600080fd5b600160a060020a033390811660009081526006602052604090205460ff1615156001146200135557600080fd5b600160a060020a03811660009081526007602052604090205460ff1615156001146200138057600080fd5b33600160a060020a0381166000818152600d60205260409081902054929550919350907fe42df0d9493dfd0d7f69902c895b94c190a53e8c27876a86f45e7c997d9d8f7c9084905190815260200160405180910390a2600160a060020a038084166000908152600d60205260408082208290556003549154918316926323b872dd921690869086905160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b15156200106757600080fd5b60005433600160a060020a039081169116146200147257600080fd5b601c5482116200148157600080fd5b601b5482106200149057600080fd5b600081116200149e57600080fd5b80601b83815481101515620014af57fe5b9060005260206000209060070201600501819055505050565b60005433600160a060020a03908116911614620014e457600080fd5b601d5460ff1615620014f557600080fd5b620014ff62002350565b15156200150b57600080fd5b6200151562003179565b7f6823b073d48d6e3a7d385eeb601452d680e74bb46afe3255a7d778f3a9b1768160405160405180910390a1601d805460ff19166001179055565b60005433600160a060020a039081169116146200156c57600080fd5b600087116200157a57600080fd5b6000861180156200158b5750606486105b15156200159757600080fd5b600085118015620015a85750606485105b1515620015b457600080fd5b428311620015c157600080fd5b60008211620015cf57600080fd5b818111620015dc57600080fd5b60008411620015ea57600080fd5b60138790556014869055601585905560198490556009839055600b829055600c8190557f981375e01cb0539ab3ccafb0b225b129b3057efac5cae04b18d91903641c9ce060405160405180910390a150505050505050565b600254600160a060020a031681565b600c5481565b601b5460009082106200166957600080fd5b601b8054839081106200167857fe5b9060005260206000209060070201600501549050919050565b60005433600160a060020a03908116911614620016ad57600080fd5b601c5415620016bb57600080fd5b60008111620016c957600080fd5b80601b6000815481101515620016db57fe5b906000526020600020906007020160060154111515620016fa57600080fd5b6200173181601b60008154811015156200171057fe5b9060005260206000209060070201600601546200323090919063ffffffff16565b601b805460009081106200174157fe5b90600052602060002090600702016006018190555050565b6000805433600160a060020a039081169116148062001786575060015433600160a060020a039081169116145b15156200179257600080fd5b600160a060020a038316600090815260066020526040902054839060ff161515600114620017bf57600080fd5b600160a060020a03811660009081526007602052604090205460ff161515600114620017ea57600080fd5b600160a060020a038416600090815260186020526040902054839010156200181157600080fd5b601a548310156200182157600080fd5b601a5462001836908463ffffffff6200323016565b601a55600160a060020a03841660009081526018602052604090205462001864908463ffffffff6200323016565b600160a060020a0385166000818152601860205260408082209390935590917f3a9e9b1f8266a9262ade2d291ca7683d067f6624208ed4739f91e660e3c23e3b9190869051911515825260208201526040908101905180910390a25092915050565b6000805433600160a060020a0390811691161480620018f3575060015433600160a060020a039081169116145b1515620018ff57600080fd5b600160a060020a038316600090815260066020526040902054839060ff1615156001146200192c57600080fd5b600160a060020a03811660009081526007602052604090205460ff1615156001146200195757600080fd5b600160a060020a038316600090815260066020526040902054839060ff1615156001146200198457600080fd5b600160a060020a03811660009081526007602052604090205460ff161515600114620019af57600080fd5b5050600160a060020a039091166000908152601260205260409020805473ffffffffffffffffffffffffffffffffffffffff19169055919050565b601c5481565b601b805460009190600019810190811062001a0757fe5b906000526020600020906007020160050154905090565b600b5481565b60055460ff1690565b60135481565b60005433600160a060020a0390811691161462001a4f57600080fd5b600160a060020a038116151562001a6557600080fd5b30600160a060020a031681600160a060020a03161415151562001a8757600080fd5b600054600160a060020a038281169116141562001aa357600080fd5b600154600160a060020a0380831691167ff8ccb027dfcd135e000e9d45e6cc2d662578a8825d4c45b5e32e0adf67e79ec660405160405180910390a36001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b601d54610100900460ff1681565b601b80548290811062001b2b57fe5b90600052602060002090600702016000915090508060000154908060010154908060020154908060030154908060040154908060050154908060060154905087565b600160a060020a031660009081526006602052604090205460ff1690565b6000805433600160a060020a039081169116148062001bb8575060015433600160a060020a039081169116145b151562001bc457600080fd5b600160a060020a038316600090815260066020526040902054839060ff16151560011462001bf157600080fd5b600160a060020a03811660009081526007602052604090205460ff16151560011462001c1c57600080fd5b8262001c36601a546019546200323090919063ffffffff16565b101562001c4257600080fd5b601a5462001c57908463ffffffff62002df116565b601a55600160a060020a03841660009081526018602052604090205462001c85908463ffffffff62002df116565b600160a060020a0385166000818152601860205260409081902092909255907f3a9e9b1f8266a9262ade2d291ca7683d067f6624208ed4739f91e660e3c23e3b90600190869051911515825260208201526040908101905180910390a25092915050565b60005433600160a060020a039081169116148062001d15575060015433600160a060020a039081169116145b151562001d2157600080fd5b600160a060020a038116600081815260066020526040808220805460ff191690557ff93f9a76c1bf3444d22400a00cb9fe990e6abe9dbb333fda48859cfee864543d919051901515815260200160405180910390a250565b600160a060020a031660009081526007602052604090205460ff1690565b6000805433600160a060020a039081169116148062001dc4575060015433600160a060020a039081169116145b151562001dd057600080fd5b6000905060095442101562001e66575060005b8181101562001e605760016006600085858581811062001dff57fe5b60209081029290920135600160a060020a0316835250810191909152604001600020805460ff191691151591909117905562001e5783838381811062001e4157fe5b90506020020135600160a060020a031662003243565b60010162001de3565b62000d40565b5060005b8181101562001ec05760016006600085858581811062001e8657fe5b60209081029290920135600160a060020a0316835250810191909152604001600020805460ff191691151591909117905560010162001e6a565b7fc1d1947210ee563a9e6fda88e7360ad167cd7dc61a01d093688956e2220a49f8838360016040518080602001831515151581526020018281038252858582818152602001925060200280828437820191505094505050505060405180910390a1505050565b601d5460ff1681565b600054600160a060020a031681565b600e5481565b60005433600160a060020a039081169116148062001f70575060015433600160a060020a039081169116145b151562001f7c57600080fd5b600160a060020a03811660008181526007602052604090819020805460ff191660019081179091557e255232b9c7545c95a579e3b4ed6b224bcadd569379c69d9715d500ed93da389151901515815260200160405180910390a250565b601a5481565b60055460ff1681565b60066020526000908152604090205460ff1681565b601260205260009081526040902054600160a060020a031681565b6000601b601c548154811015156200202c57fe5b906000526020600020906007020160020154905090565b600160a060020a033390811660009081526006602052604090205460ff1615156001146200207057600080fd5b600160a060020a03811660009081526007602052604090205460ff1615156001146200209b57600080fd5b601d5460ff161515600114620020b057600080fd5b620020ba620024ec565b15620020c557600080fd5b601154600160a060020a031663fa89401a3360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401600060405180830381600087803b15156200211657600080fd5b5af115156200212457600080fd5b50505050565b601b5460009082106200213c57600080fd5b601b8054839081106200214b57fe5b9060005260206000209060070201600201549050919050565b6005546000908190819060ff1615156001146200218057600080fd5b601b54601c54106200219157600080fd5b601b601c54815481101515620021a357fe5b6000918252602090912060079091020154421015620021c157600080fd5b6200221c601b601c54815481101515620021d757fe5b906000526020600020906007020160060154601b601c54815481101515620021fb57fe5b9060005260206000209060070201600201546200323090919063ffffffff16565b9150601b601c548154811015156200223057fe5b9060005260206000209060070201600101544211156200111d57601c546200226090600163ffffffff62002df116565b9050600082118015620022745750601b5481105b15620022f757620022b082601b838154811015156200228f57fe5b90600052602060002090600702016002015462002df190919063ffffffff16565b601b805483908110620022bf57fe5b6000918252602090912060026007909202010155601b805482908110620022e257fe5b90600052602060002090600702016002015491505b601c8190557f34cf54504fd39ab670a54acbb37f686c5bd25e6eedfa39889cba899d360bc7d98160405190815260200160405180910390a150919050565b600160a060020a031660009081526018602052604090205490565b601b80546000919060001981019081106200236757fe5b9060005260206000209060070201600101544211905090565b60005433600160a060020a0390811691161480620023ac575060015433600160a060020a039081169116145b1515620023b857600080fd5b600160a060020a038116600081815260076020526040808220805460ff191690557e255232b9c7545c95a579e3b4ed6b224bcadd569379c69d9715d500ed93da38919051901515815260200160405180910390a250565b600d6020526000908152604090205481565b60195481565b60005433600160a060020a039081169116146200244357600080fd5b601c54156200245157600080fd5b600081116200245f57600080fd5b62002497601b60008154811015156200247457fe5b906000526020600020906007020160060154601b6000815481101515620021fb57fe5b8110620024a357600080fd5b6200173181601b6000815481101515620024b957fe5b90600052602060002090600702016006015462002df190919063ffffffff16565b60186020526000908152604090205481565b6000600e54620024fb620010cc565b1015905090565b6000601b601c548154811015156200251657fe5b906000526020600020906007020160000154905090565b60175460ff1681565b60076020526000908152604090205460ff1681565b60145481565b60155481565b60005433600160a060020a039081169116146200257357600080fd5b601c5482116200258257600080fd5b601b5482106200259157600080fd5b600081116200259f57600080fd5b80601b83815481101515620025b057fe5b9060005260206000209060070201600201819055505050565b620025d3620034c0565b60005433600160a060020a03908116911614620025ef57600080fd5b60055460ff16156200260057600080fd5b8686116200260d57600080fd5b600085116200261b57600080fd5b600f5485106200262a57600080fd5b600084116200263857600080fd5b838310156200264657600080fd5b600082116200265457600080fd5b8462002667858463ffffffff6200337516565b106200267257600080fd5b8462002685848463ffffffff6200337516565b106200269057600080fd5b601b5460009011156200271f57601b80546000198101908110620026b057fe5b906000526020600020906007020160e06040519081016040908152825482526001830154602083019081526002840154918301919091526003830154606083015260048301546080830152600583015460a083015260069092015460c082015291505187116200271f57600080fd5b601b805460018101620027338382620034fe565b9160005260206000209060070201600060e0604051908101604052808b81526020018a815260200189815260200188815260200187815260200186815260200160008152509091909150600082015181556020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c082015181600601555050507f5858d9b130a07462c8ba8f5a091c7463cdb0d5dfc3414467a51f9c8d3d68357987878787878760405180878152602001868152602001858152602001848152602001838152602001828152602001965050505050505060405180910390a150505050505050565b6000805433600160a060020a039081169116148062002858575060015433600160a060020a039081169116145b15156200286457600080fd5b5060005b81811015620028be576001600760008585858181106200288457fe5b60209081029290920135600160a060020a0316835250810191909152604001600020805460ff191691151591909117905560010162002868565b7f3eb50e579d2144f480a8551725cd5c7a8613fef3814f38daa4ee54154c9bddb6838360016040518080602001831515151581526020018281038252858582818152602001925060200280828437820191505094505050505060405180910390a1505050565b600160a060020a03166000908152600d602052604090205490565b60005433600160a060020a03908116911614806200296b575060015433600160a060020a039081169116145b15156200297757600080fd5b600160a060020a0381166000908152600660209081526040808320805460ff19166001179055600890915290205460ff16158015620029b7575060095442105b15620029c857620029c88162003243565b80600160a060020a03167ff93f9a76c1bf3444d22400a00cb9fe990e6abe9dbb333fda48859cfee864543d6001604051901515815260200160405180910390a250565b60086020526000908152604090205460ff1681565b60005433600160a060020a0390811691161462002a3c57600080fd5b42821162002a4957600080fd5b81811162002a5657600080fd5b601c54831162002a6557600080fd5b601b54831062002a7457600080fd5b81601b8481548110151562002a8557fe5b6000918252602090912060079091020155601b80548291908590811062002aa857fe5b906000526020600020906007020160010181905550505050565b60005433600160a060020a0390811691161462002ade57600080fd5b600160a060020a038116151562002af457600080fd5b30600160a060020a031681600160a060020a03161415151562002b1657600080fd5b600054600160a060020a0380831691167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b6000601b601c5481548110151562001a0757fe5b600154600160a060020a031681565b600f5481565b601154600160a060020a031681565b600354600160a060020a031681565b601b54600090821062002bda57600080fd5b601b80548390811062002be957fe5b9060005260206000209060070201600601549050919050565b600160a060020a0382166000908152600660205260408120548190849060ff16151560011462002c3157600080fd5b600160a060020a03811660009081526007602052604090205460ff16151560011462002c5c57600080fd5b600160a060020a038516151562002c7257600080fd5b83151562002c7f57600080fd5b60055460ff16151560011462002c9457600080fd5b601b601c5481548110151562002ca657fe5b600091825260209091206007909102015442101562002cc457600080fd5b62002cce62002164565b601b54601c54919450901062002ce357600080fd5b601b601c5481548110151562002cf557fe5b906000526020600020906007020160000154421015801562002d3a5750601b601c5481548110151562002d2457fe5b9060005260206000209060070201600101544211155b151562002d4657600080fd5b601b601c5481548110151562002d5857fe5b906000526020600020906007020160030154841015151562002d7957600080fd5b601b601c5481548110151562002d8b57fe5b906000526020600020906007020160040154841115151562002dac57600080fd5b62002db78462002dcd565b915081831162002dc657600080fd5b5050505050565b600062002deb62002ddd62002b81565b839063ffffffff6200337516565b92915050565b60008282018381101562002e0157fe5b8091505b5092915050565b600080600080600080600062002e2e88601b601c54815481101515620024b957fe5b601b601c5481548110151562002e4057fe5b90600052602060002090600702016006018190555062002e618989620033a4565b600160a060020a03808a16600090815260126020526040902054349850169550851580159062002e94575060175460ff16155b15620030ac5762002ea58762003487565b60145490955062002ed09062002ec387606463ffffffff6200349716565b9063ffffffff6200337516565b60155490945062002eee9062002ec387606463ffffffff6200349716565b925062002f096016546013546200323090919063ffffffff16565b915081151562002f26576017805460ff19166001179055620030ac565b81841062002f6f57819350600092507f85ffe6a98fec596b0fbb1de18a071ba2ed4a7e51673575fbea30fb657bdf551960405160405180910390a16017805460ff191660011790555b60175460ff1615801562002f835750818410155b1562002fd75762002f9b828563ffffffff6200323016565b92507f85ffe6a98fec596b0fbb1de18a071ba2ed4a7e51673575fbea30fb657bdf551960405160405180910390a16017805460ff191660011790555b62002fe9848463ffffffff62002df116565b60165490915062003001908263ffffffff62002df116565b601655600084111562003058576200301a8685620033a4565b85600160a060020a03167f5d99c7882f16e240169547a9215180521502d94f149258e0aabaf56904b6141b8560405190815260200160405180910390a25b6000831115620030ac576200306e8984620033a4565b88600160a060020a03167f5d99c7882f16e240169547a9215180521502d94f149258e0aabaf56904b6141b8460405190815260200160405180910390a25b505050505050505050565b5050565b601154600160a060020a031663f340fa01343360405160e060020a63ffffffff8516028152600160a060020a0390911660048201526024016000604051808303818588803b15156200211657600080fd5b6200311662002018565b6200312062000e75565b1415620030b757601c546200313d90600163ffffffff62002df116565b601c8190557f34cf54504fd39ab670a54acbb37f686c5bd25e6eedfa39889cba899d360bc7d99060405190815260200160405180910390a15050565b62003183620024ec565b15620031e057601154600160a060020a03166343d726d66040518163ffffffff1660e060020a028152600401600060405180830381600087803b1515620031c957600080fd5b5af11515620031d757600080fd5b5050506200322e565b601154600160a060020a0316638c52dc416040518163ffffffff1660e060020a028152600401600060405180830381600087803b15156200322057600080fd5b5af1151562000d4057600080fd5b565b6000828211156200323d57fe5b50900390565b600160a060020a03811615156200325a5762003372565b600160a060020a03811660009081526008602052604090205460ff16151560011415620032875762003372565b600b54600a54600c54620032a19163ffffffff6200323016565b11156200337257600160a060020a0381166000908152600860205260409020805460ff19166001179055600b54600a54620032e29163ffffffff62002df116565b600a55600b54600160a060020a038216600090815260186020526040902054620033129163ffffffff62002df116565b600160a060020a0382166000818152601860205260409081902092909255600b5490917f3a9e9b1f8266a9262ade2d291ca7683d067f6624208ed4739f91e660e3c23e3b9160019151911515825260208201526040908101905180910390a25b50565b6000808315156200338a576000915062002e05565b508282028284828115156200339b57fe5b041462002e0157fe5b601d54610100900460ff16156200343f57600354600054600160a060020a03918216916323b872dd9116848460405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b15156200342057600080fd5b5af115156200342e57600080fd5b5050506040518051905050620030b7565b600160a060020a0382166000908152600d60205260409020546200346a908263ffffffff62002df116565b600160a060020a0383166000908152600d60205260409020555050565b600062002deb62002ddd620019f0565b6000808284811515620034a657fe5b04949350505050565b60405161060c806200356f83390190565b60e060405190810160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b81548183558181151162000d405760008381526020902062000d409162000e9e9160079182028101918502015b808211156200356a576000808255600182018190556002820181905560038201819055600482018190556005820181905560068201556007016200352b565b509056006060604052341561000f57600080fd5b60405160208061060c8339810160405280805160008054600160a060020a03191633600160a060020a039081169190911790915590925082161515905061005557600080fd5b60028054600160a060020a031916600160a060020a03929092169190911760a060020a60ff021916905561057e8061008e6000396000f3006060604052600436106100985763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166343d726d6811461009d578063521eb273146100b25780638c52dc41146100e15780638da5cb5b146100f4578063c19d93fb14610107578063cb13cddb1461013e578063f2fde38b1461016f578063f340fa011461018e578063fa89401a146101a2575b600080fd5b34156100a857600080fd5b6100b06101c1565b005b34156100bd57600080fd5b6100c561029c565b604051600160a060020a03909116815260200160405180910390f35b34156100ec57600080fd5b6100b06102ab565b34156100ff57600080fd5b6100c561033c565b341561011257600080fd5b61011a61034b565b6040518082600281111561012a57fe5b60ff16815260200191505060405180910390f35b341561014957600080fd5b61015d600160a060020a036004351661035b565b60405190815260200160405180910390f35b341561017a57600080fd5b6100b0600160a060020a036004351661036d565b6100b0600160a060020a0360043516610408565b34156101ad57600080fd5b6100b0600160a060020a036004351661048c565b60005433600160a060020a039081169116146101dc57600080fd5b60006002805460a060020a900460ff16908111156101f657fe5b1461020057600080fd5b6002805474ff00000000000000000000000000000000000000001916740200000000000000000000000000000000000000001790557f1cdde67b72a90f19919ac732a437ac2f7a10fc128d28c2a6e525d89ce5cd9d3a60405160405180910390a1600254600160a060020a039081169030163180156108fc0290604051600060405180830381858888f19350505050151561029a57600080fd5b565b600254600160a060020a031681565b60005433600160a060020a039081169116146102c657600080fd5b60006002805460a060020a900460ff16908111156102e057fe5b146102ea57600080fd5b6002805474ff0000000000000000000000000000000000000000191660a060020a1790557f599d8e5a83cffb867d051598c4d70e805d59802d8081c1c7d6dffc5b6aca2b8960405160405180910390a1565b600054600160a060020a031681565b60025460a060020a900460ff1681565b60016020526000908152604090205481565b60005433600160a060020a0390811691161461038857600080fd5b600160a060020a038116151561039d57600080fd5b600054600160a060020a0380831691167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60005433600160a060020a0390811691161461042357600080fd5b60006002805460a060020a900460ff169081111561043d57fe5b1461044757600080fd5b600160a060020a038116600090815260016020526040902054610470903463ffffffff61053c16565b600160a060020a03909116600090815260016020526040902055565b600060016002805460a060020a900460ff16908111156104a857fe5b146104b257600080fd5b50600160a060020a038116600081815260016020526040808220805492905590919082156108fc0290839051600060405180830381858888f1935050505015156104fb57600080fd5b81600160a060020a03167fd7dee2702d63ad89917b6a4da9981c90c4d24f8c2bdfd64c604ecae57d8d06518260405190815260200160405180910390a25050565b60008282018381101561054b57fe5b93925050505600a165627a7a723058208cdf4fd7df9bdb872f723d0284f76c6ac5a0f24a615d3beff4691b74ad5d2b760029a165627a7a7230582016d217918c55148b163dc21d318b63165da2b927c4157abe3c1e9ec1d30bff5b002900000000000000000000000048694ba1f112b98ec471d55719d9d00a323aa4400000000000000000000000000609ade280d4f7c416f68015f36b78582c2abbaf000000000000000000000000000000000000000006765c793fa10079d000000000000000000000000000000000000000000000000052b7d2dcc80cd2e40000000000000000000000000000000000000000000000033b2e3c9fd0803ce8000000

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

-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 00000000000000000000000048694ba1f112b98ec471d55719d9d00a323aa440
Arg [1] : 0000000000000000000000000609ade280d4f7c416f68015f36b78582c2abbaf
Arg [2] : 000000000000000000000000000000000000000006765c793fa10079d0000000
Arg [3] : 00000000000000000000000000000000000000000052b7d2dcc80cd2e4000000
Arg [4] : 0000000000000000000000000000000000000000033b2e3c9fd0803ce8000000


   Swarm Source:
bzzr://16d217918c55148b163dc21d318b63165da2b927c4157abe3c1e9ec1d30bff5b

 

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