contract GMToken is MintableToken, BurnableToken {

    string public constant name = "GameMax";
    string public constant symbol = "GM";
    uint8 public constant decimals = 3;



    // --------------------------------------------------------

    function transferFrom(address _from, address _to, uint256 _value) public  returns (bool) {
        bool result = super.transferFrom(_from, _to, _value);
        return result;
    }

   

    function transfer(address _to, uint256 _value) public  returns (bool) {
        bool result = super.transfer(_to, _value);
        return result;
    }


    function mint(address _to, uint256 _amount)public  onlyOwner canMint returns (bool) {
        bool result = super.mint(_to, _amount);
        return result;
    }

    function burn(uint256 _value) public {
        super.burn(_value);
    }

    // --------------------------------------------------------

    function transferAndCall(address _recipient, uint256 _amount, bytes _data) public {
        require(_recipient != address(0));
        require(_amount <= balances[msg.sender]);

        balances[msg.sender] = balances[msg.sender].sub(_amount);
        balances[_recipient] = balances[_recipient].add(_amount);

        require(TokenRecipient(_recipient).tokenFallback(msg.sender, _amount, _data));
        emit Transfer(msg.sender, _recipient, _amount);
    }

}
function transferAndCall(address _recipient, uint256 _amount, bytes _data) public {
    require(_recipient != address(0));
    require(_amount <= balances[msg.sender]);

    balances[msg.sender] = balances[msg.sender].sub(_amount);
    balances[_recipient] = balances[_recipient].add(_amount);

    require(TokenRecipient(_recipient).tokenFallback(msg.sender, _amount, _data));
    emit Transfer(msg.sender, _recipient, _amount);
}

// --------------------------------------------------------