abstract contract HookPausable is ERC721, Ownable, Pausable {
	/**
	 * @dev See {ERC721-_beforeTokenTransfer}.
	 *
	 * Requirements:
	 *
	 * - the contract must not be paused.
	 */
	function _beforeTokenTransfer(
		address from,
		address to,
		uint256 tokenId
	) internal virtual override {
		super._beforeTokenTransfer(from, to, tokenId);
		if (_msgSender() != owner()) {
			require(!paused(), "HookPausable: token transfer while paused");
		}
	}
}
/**
 * @dev ERC721 token with pausable token transfers, minting and burning.
 *
 * Useful for scenarios such as preventing trades until the end of an evaluation
 * period, or having an emergency switch for freezing all token transfers in the
 * event of a large bug.
 */
function _beforeTokenTransfer(
	address from,
	address to,
	uint256 tokenId
) internal virtual override {
	super._beforeTokenTransfer(from, to, tokenId);
	if (_msgSender() != owner()) {
		require(!paused(), "HookPausable: token transfer while paused");
	}
}

/**
 	 * @dev See {ERC721-_beforeTokenTransfer}.
 	 *
 	 * Requirements:
 	 *
 	 * - the contract must not be paused.
 	 */