function contributeFor(address _participant) public payable returns(bool) {
        require(now < SALES_END);
        require(saleContributions < ETH_HARD_CAP);

        uint bonusPercents = 0;
        if (now < SALES_START) { 
            require(whitelistPrivate[_participant]);
            bonusPercents = BONUS_WL;
        } else if (now < SALES_START + 1 days) { 
            require(whitelistPublic[_participant] || whitelistPrivate[_participant]);
            bonusPercents = BONUS_WL;
        } else if (now < SALES_START + 2 days) {
            bonusPercents = BONUS_2_DAYS;
        } else if (now < SALES_START + 3 days) {
            bonusPercents = BONUS_3_DAYS;
        } else if (now < SALES_START + 4 days) {
            bonusPercents = BONUS_4_DAYS;
        } else if (now < SALES_START + 5 days) {
            bonusPercents = BONUS_5_DAYS;
        } else if (now < SALES_START + 6 days) {
            bonusPercents = BONUS_6_DAYS;
        } else if (now < SALES_START + 15 days) {
            bonusPercents = BONUS_15_DAYS;
        }

        uint tokensAmount = (msg.value * TOKEN_CENTS) / TOKEN_PRICE;
        require(tokensAmount > 0);
        uint bonusTokens = (tokensAmount * bonusPercents) / 100;
        uint totalTokens = tokensAmount + bonusTokens;

        tokensPurchased += totalTokens;
        require(tokensPurchased <= SALE_MAX_CAP);
        require(TriggmineToken(TOKEN_ADDRESS).transferFrom(ASSET_MANAGER_WALLET, _participant, totalTokens));
        saleContributions += msg.value;
        ESCROW_WALLET.transfer(msg.value);

        Contributed(_participant, msg.value, totalTokens);
        return true;
    }