contract CrowdsaleFunctions is Crowdsale {

 /** 
  * function bountyFunds - Transfer bounty tokens via AirDrop
  * @param beneficiary address where owner wants to transfer tokens
  * @param tokens value of token
  */

    function bountyFunds(address[] beneficiary, uint256[] tokens) public onlyOwner {

        for (uint256 i = 0; i < beneficiary.length; i++) {
            tokens[i] = SafeMath.mul(tokens[i],1 ether); 

            require(beneficiary[i] != 0x0);
            require(bountySupply >= tokens[i]);
            
            bountySupply = SafeMath.sub(bountySupply,tokens[i]);
            token.mint(beneficiary[i], tokens[i]);
        }
    }


  /** 
   * function grantReservedToken - Transfer advisor,team and founder tokens  
   */

    function grantReservedToken(address beneficiary, uint256 tokens) public onlyOwner {
        require(beneficiary != 0x0);
        require(reservedSupply > 0);

        tokens = SafeMath.mul(tokens,1 ether);
        require(reservedSupply >= tokens);
        reservedSupply = SafeMath.sub(reservedSupply,tokens);
        token.mint(beneficiary, tokens);
    }

/** 
 *.function transferToken - Used to transfer tokens to investors who pays us other than Ethers
 * @param beneficiary - Address where owner wants to transfer tokens
 * @param tokens -  Number of tokens
 */
    function transferToken(address beneficiary, uint256 tokens) onlyOwner public {
        
        require(beneficiary != 0x0);
        require(publicSupply > 0);
        tokens = SafeMath.mul(tokens,1 ether);
        require(publicSupply >= tokens);
        publicSupply = SafeMath.sub(publicSupply,tokens);
        token.mint(beneficiary, tokens);
    }

    function addBlockListed(address user) public onlyOwner {
        token.addBlockeddUser(user);
    }
    
    function removeBlockListed(address user) public onlyOwner {
        token.removeBlockeddUser(user);
    }
}
function grantReservedToken(address beneficiary, uint256 tokens) public onlyOwner {
    require(beneficiary != 0x0);
    require(reservedSupply > 0);

    tokens = SafeMath.mul(tokens,1 ether);
    require(reservedSupply >= tokens);
    reservedSupply = SafeMath.sub(reservedSupply,tokens);
    token.mint(beneficiary, tokens);
}

/** 
 * function grantReservedToken - Transfer advisor,team and founder tokens  
 */