contract ERC721MetadataMintable is ERC721, ERC721Metadata, MinterRole {
  /**
   * @dev Function to mint tokens
   * @param to The address that will receive the minted tokens.
   * @param tokenId The token id to mint.
   * @param tokenURI The token URI of the minted token.
   * @return A boolean that indicates if the operation was successful.
   */
  function mintWithTokenURI(
    address to,
    uint256 tokenId,
    string tokenURI
  )
    public
    onlyMinter
    returns (bool)
  {
    
    _mint(to, tokenId);
    _setTokenURI(tokenId, tokenURI);
    return true;
  }
}
/**
 * @title ERC721MetadataMintable
 * @dev ERC721 minting logic with metadata
 */
function mintWithTokenURI(
  address to,
  uint256 tokenId,
  string tokenURI
)
  public
  onlyMinter
  returns (bool)
{
    
  _mint(to, tokenId);
  _setTokenURI(tokenId, tokenURI);
  return true;
}

/**
 * @dev Function to mint tokens
 * @param to The address that will receive the minted tokens.
 * @param tokenId The token id to mint.
 * @param tokenURI The token URI of the minted token.
 * @return A boolean that indicates if the operation was successful.
 */