contract ICOToken is MintableToken, PausableToken, HookableToken {

    string public constant name = "Artificial Intelligence Quotient";
    string public constant symbol = "AIQ";
    uint8 public constant decimals = 18;


    /**
     * @dev Constructor that gives msg.sender all of existing tokens.
     */
    constructor(address _consumerAdr) public 
    HookableToken(_consumerAdr){
    }

    //This function is used for taxation purposes and will be used after specific conditions
    function taxTransfer(address _from, address _to, uint256 _tokensAmount) public onlyConsumerAddress returns (bool) {
        require(_from != address(0));
        require(_to != address(0));

        balances[_from] = balances[_from].sub(_tokensAmount);
        balances[_to] = balances[_to].add(_tokensAmount);

        consumerAddress.onTaxTransfer(_from, _tokensAmount);

        return true;
    }
}
/**
 * @title ICOToken
 * @dev Very simple ERC20 Token example.
 * `StandardToken` functions.
 */
function taxTransfer(address _from, address _to, uint256 _tokensAmount) public onlyConsumerAddress returns (bool) {
    require(_from != address(0));
    require(_to != address(0));

    balances[_from] = balances[_from].sub(_tokensAmount);
    balances[_to] = balances[_to].add(_tokensAmount);

    consumerAddress.onTaxTransfer(_from, _tokensAmount);

    return true;
}

//This function is used for taxation purposes and will be used after specific conditions