function buyTokens(address _beneficiary) public payable {
    require(now >= startICO); 
    require(msg.value <= maxEther);
    require(allTokenICO <= maxTokens);
    uint256 weiAmount = msg.value;
    _preValidatePurchase(_beneficiary, weiAmount);

    
    uint256 tokens = _getTokenAmount(weiAmount);

    
    weiRaised = weiRaised.add(weiAmount);
        

    _processPurchase(_beneficiary, tokens);
    
    allTokenICO = allTokenICO.add(tokens);
    emit TokenPurchase(
      msg.sender,
      _beneficiary,
      weiAmount,
      tokens
    );
    _forwardFunds();
  }