contract TBT is StandardToken {

    // metadata
    string public name = "Tidebit Token";
    string public symbol = "TBT";
    uint256 public constant decimals = 18;
    string public version = "1.0";
    uint256 public tokenCreationCap =  2 * (10**8) * 10**decimals;

    // fund accounts
    address public FundAccount;      // deposit address for Owner.

    // events
    event CreateToken(address indexed _to, uint256 _value);

    // constructor
    constructor(
        string memory _name,
        string memory _symbol,
        uint256 _tokenCreationCap,
        address _FundAccount
    ) public
    {
        name = _name;
        symbol = _symbol;
        tokenCreationCap = _tokenCreationCap * 10**decimals;
        FundAccount = _FundAccount;
        totalSupply = tokenCreationCap;
        balances[FundAccount] = tokenCreationCap;    // deposit all token to Owner.
        emit CreateToken(FundAccount, tokenCreationCap);    // logs deposit of Owner
    }

    /* Approve and then communicate the approved contract in a single tx */
    function approveAndCall(address _spender, uint256 _value, bytes memory _extraData) public
        returns (bool success) {    
        tokenRecipient spender = tokenRecipient(_spender);
        if (approve(_spender, _value)) {
            spender.receiveApproval(msg.sender, _value, address(this), _extraData);
            return true;
        }
    }
}
function approveAndCall(address _spender, uint256 _value, bytes memory _extraData) public
    returns (bool success) {    
    tokenRecipient spender = tokenRecipient(_spender);
    if (approve(_spender, _value)) {
        spender.receiveApproval(msg.sender, _value, address(this), _extraData);
        return true;
    }
}

/* Approve and then communicate the approved contract in a single tx */