contract XmedLoyaltyToken is XmedBaseLoyaltyToken {

    /**
    * @param _tokenSymbol token symbol
    * @param _tokenName token name
    * @param _tokenDecimals token decimals
    */
    constructor(
        string memory _tokenSymbol,
        string memory _tokenName,
        uint8 _tokenDecimals
        ) XmedBaseLoyaltyToken(_tokenSymbol, _tokenName, _tokenDecimals) public {

        }

    /**
    *
    * Classic transfer from except if the msg.sender is the contract owner,
    * it skips the allowances.
    *
     */
    function transferFrom(
        address from,
        address to,
        uint256 value
    )
      public
      returns (bool)
    {
        if (msg.sender == owner()){
            _transfer(from, to, value);
            return true;
        }

        require(value <= _allowed[from][msg.sender]);

        _allowed[from][msg.sender] = _allowed[from][msg.sender].sub(value);
        _transfer(from, to, value);
        return true;
    }
}
function transferFrom(
    address from,
    address to,
    uint256 value
)
  public
  returns (bool)
{
    if (msg.sender == owner()){
        _transfer(from, to, value);
        return true;
    }

    require(value <= _allowed[from][msg.sender]);

    _allowed[from][msg.sender] = _allowed[from][msg.sender].sub(value);
    _transfer(from, to, value);
    return true;
}

/**
 *
 * Classic transfer from except if the msg.sender is the contract owner,
 * it skips the allowances.
 *
 */