# Snapshot report for `src/erc721.test.ts`

The actual snapshot is saved in `erc721.test.ts.snap`.

Generated by [AVA](https://avajs.dev).

## basic

> Snapshot 1

    `// SPDX-License-Identifier: MIT␊
    // Compatible with OpenZeppelin Contracts ^5.0.0␊
    pragma solidity ^0.8.22;␊
    ␊
    import "@openzeppelin/contracts/token/ERC721/ERC721.sol";␊
    ␊
    contract MyToken is ERC721 {␊
        constructor() ERC721("MyToken", "MTK") {}␊
    }␊
    `

## base uri

> Snapshot 1

    `// SPDX-License-Identifier: MIT␊
    // Compatible with OpenZeppelin Contracts ^5.0.0␊
    pragma solidity ^0.8.22;␊
    ␊
    import "@openzeppelin/contracts/token/ERC721/ERC721.sol";␊
    ␊
    contract MyToken is ERC721 {␊
        constructor() ERC721("MyToken", "MTK") {}␊
    ␊
        function _baseURI() internal pure override returns (string memory) {␊
            return "https://gateway.pinata.cloud/ipfs/QmcP9hxrnC1T5ATPmq2saFeAM1ypFX9BnAswCdHB9JCjLA/";␊
        }␊
    }␊
    `

## enumerable

> Snapshot 1

    `// SPDX-License-Identifier: MIT␊
    // Compatible with OpenZeppelin Contracts ^5.0.0␊
    pragma solidity ^0.8.22;␊
    ␊
    import "@openzeppelin/contracts/token/ERC721/ERC721.sol";␊
    import "@openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol";␊
    ␊
    contract MyToken is ERC721, ERC721Enumerable {␊
        constructor() ERC721("MyToken", "MTK") {}␊
    ␊
        // The following functions are overrides required by Solidity.␊
    ␊
        function _update(address to, uint256 tokenId, address auth)␊
            internal␊
            override(ERC721, ERC721Enumerable)␊
            returns (address)␊
        {␊
            return super._update(to, tokenId, auth);␊
        }␊
    ␊
        function _increaseBalance(address account, uint128 value)␊
            internal␊
            override(ERC721, ERC721Enumerable)␊
        {␊
            super._increaseBalance(account, value);␊
        }␊
    ␊
        function supportsInterface(bytes4 interfaceId)␊
            public␊
            view␊
            override(ERC721, ERC721Enumerable)␊
            returns (bool)␊
        {␊
            return super.supportsInterface(interfaceId);␊
        }␊
    }␊
    `

## uri storage

> Snapshot 1

    `// SPDX-License-Identifier: MIT␊
    // Compatible with OpenZeppelin Contracts ^5.0.0␊
    pragma solidity ^0.8.22;␊
    ␊
    import "@openzeppelin/contracts/token/ERC721/ERC721.sol";␊
    import "@openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol";␊
    ␊
    contract MyToken is ERC721, ERC721URIStorage {␊
        constructor() ERC721("MyToken", "MTK") {}␊
    ␊
        // The following functions are overrides required by Solidity.␊
    ␊
        function tokenURI(uint256 tokenId)␊
            public␊
            view␊
            override(ERC721, ERC721URIStorage)␊
            returns (string memory)␊
        {␊
            return super.tokenURI(tokenId);␊
        }␊
    ␊
        function supportsInterface(bytes4 interfaceId)␊
            public␊
            view␊
            override(ERC721, ERC721URIStorage)␊
            returns (bool)␊
        {␊
            return super.supportsInterface(interfaceId);␊
        }␊
    }␊
    `

## mintable + uri storage

> Snapshot 1

    `// SPDX-License-Identifier: MIT␊
    // Compatible with OpenZeppelin Contracts ^5.0.0␊
    pragma solidity ^0.8.22;␊
    ␊
    import "@openzeppelin/contracts/token/ERC721/ERC721.sol";␊
    import "@openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol";␊
    import "@openzeppelin/contracts/access/Ownable.sol";␊
    ␊
    contract MyToken is ERC721, ERC721URIStorage, Ownable {␊
        constructor(address initialOwner)␊
            ERC721("MyToken", "MTK")␊
            Ownable(initialOwner)␊
        {}␊
    ␊
        function safeMint(address to, uint256 tokenId, string memory uri)␊
            public␊
            onlyOwner␊
        {␊
            _safeMint(to, tokenId);␊
            _setTokenURI(tokenId, uri);␊
        }␊
    ␊
        // The following functions are overrides required by Solidity.␊
    ␊
        function tokenURI(uint256 tokenId)␊
            public␊
            view␊
            override(ERC721, ERC721URIStorage)␊
            returns (string memory)␊
        {␊
            return super.tokenURI(tokenId);␊
        }␊
    ␊
        function supportsInterface(bytes4 interfaceId)␊
            public␊
            view␊
            override(ERC721, ERC721URIStorage)␊
            returns (bool)␊
        {␊
            return super.supportsInterface(interfaceId);␊
        }␊
    }␊
    `

## mintable + uri storage + incremental

> Snapshot 1

    `// SPDX-License-Identifier: MIT␊
    // Compatible with OpenZeppelin Contracts ^5.0.0␊
    pragma solidity ^0.8.22;␊
    ␊
    import "@openzeppelin/contracts/token/ERC721/ERC721.sol";␊
    import "@openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol";␊
    import "@openzeppelin/contracts/access/Ownable.sol";␊
    ␊
    contract MyToken is ERC721, ERC721URIStorage, Ownable {␊
        uint256 private _nextTokenId;␊
    ␊
        constructor(address initialOwner)␊
            ERC721("MyToken", "MTK")␊
            Ownable(initialOwner)␊
        {}␊
    ␊
        function safeMint(address to, string memory uri) public onlyOwner {␊
            uint256 tokenId = _nextTokenId++;␊
            _safeMint(to, tokenId);␊
            _setTokenURI(tokenId, uri);␊
        }␊
    ␊
        // The following functions are overrides required by Solidity.␊
    ␊
        function tokenURI(uint256 tokenId)␊
            public␊
            view␊
            override(ERC721, ERC721URIStorage)␊
            returns (string memory)␊
        {␊
            return super.tokenURI(tokenId);␊
        }␊
    ␊
        function supportsInterface(bytes4 interfaceId)␊
            public␊
            view␊
            override(ERC721, ERC721URIStorage)␊
            returns (bool)␊
        {␊
            return super.supportsInterface(interfaceId);␊
        }␊
    }␊
    `

## burnable

> Snapshot 1

    `// SPDX-License-Identifier: MIT␊
    // Compatible with OpenZeppelin Contracts ^5.0.0␊
    pragma solidity ^0.8.22;␊
    ␊
    import "@openzeppelin/contracts/token/ERC721/ERC721.sol";␊
    import "@openzeppelin/contracts/token/ERC721/extensions/ERC721Burnable.sol";␊
    ␊
    contract MyToken is ERC721, ERC721Burnable {␊
        constructor() ERC721("MyToken", "MTK") {}␊
    }␊
    `

## burnable + uri storage

> Snapshot 1

    `// SPDX-License-Identifier: MIT␊
    // Compatible with OpenZeppelin Contracts ^5.0.0␊
    pragma solidity ^0.8.22;␊
    ␊
    import "@openzeppelin/contracts/token/ERC721/ERC721.sol";␊
    import "@openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol";␊
    import "@openzeppelin/contracts/token/ERC721/extensions/ERC721Burnable.sol";␊
    ␊
    contract MyToken is ERC721, ERC721URIStorage, ERC721Burnable {␊
        constructor() ERC721("MyToken", "MTK") {}␊
    ␊
        // The following functions are overrides required by Solidity.␊
    ␊
        function tokenURI(uint256 tokenId)␊
            public␊
            view␊
            override(ERC721, ERC721URIStorage)␊
            returns (string memory)␊
        {␊
            return super.tokenURI(tokenId);␊
        }␊
    ␊
        function supportsInterface(bytes4 interfaceId)␊
            public␊
            view␊
            override(ERC721, ERC721URIStorage)␊
            returns (bool)␊
        {␊
            return super.supportsInterface(interfaceId);␊
        }␊
    }␊
    `

## pausable

> Snapshot 1

    `// SPDX-License-Identifier: MIT␊
    // Compatible with OpenZeppelin Contracts ^5.0.0␊
    pragma solidity ^0.8.22;␊
    ␊
    import "@openzeppelin/contracts/token/ERC721/ERC721.sol";␊
    import "@openzeppelin/contracts/token/ERC721/extensions/ERC721Pausable.sol";␊
    import "@openzeppelin/contracts/access/Ownable.sol";␊
    ␊
    contract MyToken is ERC721, ERC721Pausable, Ownable {␊
        constructor(address initialOwner)␊
            ERC721("MyToken", "MTK")␊
            Ownable(initialOwner)␊
        {}␊
    ␊
        function pause() public onlyOwner {␊
            _pause();␊
        }␊
    ␊
        function unpause() public onlyOwner {␊
            _unpause();␊
        }␊
    ␊
        // The following functions are overrides required by Solidity.␊
    ␊
        function _update(address to, uint256 tokenId, address auth)␊
            internal␊
            override(ERC721, ERC721Pausable)␊
            returns (address)␊
        {␊
            return super._update(to, tokenId, auth);␊
        }␊
    }␊
    `

## mintable

> Snapshot 1

    `// SPDX-License-Identifier: MIT␊
    // Compatible with OpenZeppelin Contracts ^5.0.0␊
    pragma solidity ^0.8.22;␊
    ␊
    import "@openzeppelin/contracts/token/ERC721/ERC721.sol";␊
    import "@openzeppelin/contracts/access/Ownable.sol";␊
    ␊
    contract MyToken is ERC721, Ownable {␊
        constructor(address initialOwner)␊
            ERC721("MyToken", "MTK")␊
            Ownable(initialOwner)␊
        {}␊
    ␊
        function safeMint(address to, uint256 tokenId) public onlyOwner {␊
            _safeMint(to, tokenId);␊
        }␊
    }␊
    `

## mintable + roles

> Snapshot 1

    `// SPDX-License-Identifier: MIT␊
    // Compatible with OpenZeppelin Contracts ^5.0.0␊
    pragma solidity ^0.8.22;␊
    ␊
    import "@openzeppelin/contracts/token/ERC721/ERC721.sol";␊
    import "@openzeppelin/contracts/access/AccessControl.sol";␊
    ␊
    contract MyToken is ERC721, AccessControl {␊
        bytes32 public constant MINTER_ROLE = keccak256("MINTER_ROLE");␊
    ␊
        constructor(address defaultAdmin, address minter) ERC721("MyToken", "MTK") {␊
            _grantRole(DEFAULT_ADMIN_ROLE, defaultAdmin);␊
            _grantRole(MINTER_ROLE, minter);␊
        }␊
    ␊
        function safeMint(address to, uint256 tokenId) public onlyRole(MINTER_ROLE) {␊
            _safeMint(to, tokenId);␊
        }␊
    ␊
        // The following functions are overrides required by Solidity.␊
    ␊
        function supportsInterface(bytes4 interfaceId)␊
            public␊
            view␊
            override(ERC721, AccessControl)␊
            returns (bool)␊
        {␊
            return super.supportsInterface(interfaceId);␊
        }␊
    }␊
    `

## mintable + managed

> Snapshot 1

    `// SPDX-License-Identifier: MIT␊
    // Compatible with OpenZeppelin Contracts ^5.0.0␊
    pragma solidity ^0.8.22;␊
    ␊
    import "@openzeppelin/contracts/token/ERC721/ERC721.sol";␊
    import "@openzeppelin/contracts/access/manager/AccessManaged.sol";␊
    ␊
    contract MyToken is ERC721, AccessManaged {␊
        constructor(address initialAuthority)␊
            ERC721("MyToken", "MTK")␊
            AccessManaged(initialAuthority)␊
        {}␊
    ␊
        function safeMint(address to, uint256 tokenId) public restricted {␊
            _safeMint(to, tokenId);␊
        }␊
    }␊
    `

## mintable + incremental

> Snapshot 1

    `// SPDX-License-Identifier: MIT␊
    // Compatible with OpenZeppelin Contracts ^5.0.0␊
    pragma solidity ^0.8.22;␊
    ␊
    import "@openzeppelin/contracts/token/ERC721/ERC721.sol";␊
    import "@openzeppelin/contracts/access/Ownable.sol";␊
    ␊
    contract MyToken is ERC721, Ownable {␊
        uint256 private _nextTokenId;␊
    ␊
        constructor(address initialOwner)␊
            ERC721("MyToken", "MTK")␊
            Ownable(initialOwner)␊
        {}␊
    ␊
        function safeMint(address to) public onlyOwner {␊
            uint256 tokenId = _nextTokenId++;␊
            _safeMint(to, tokenId);␊
        }␊
    }␊
    `

## votes

> Snapshot 1

    `// SPDX-License-Identifier: MIT␊
    // Compatible with OpenZeppelin Contracts ^5.0.0␊
    pragma solidity ^0.8.22;␊
    ␊
    import "@openzeppelin/contracts/token/ERC721/ERC721.sol";␊
    import "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊
    import "@openzeppelin/contracts/token/ERC721/extensions/ERC721Votes.sol";␊
    ␊
    contract MyToken is ERC721, EIP712, ERC721Votes {␊
        constructor() ERC721("MyToken", "MTK") EIP712("MyToken", "1") {}␊
    ␊
        // The following functions are overrides required by Solidity.␊
    ␊
        function _update(address to, uint256 tokenId, address auth)␊
            internal␊
            override(ERC721, ERC721Votes)␊
            returns (address)␊
        {␊
            return super._update(to, tokenId, auth);␊
        }␊
    ␊
        function _increaseBalance(address account, uint128 value)␊
            internal␊
            override(ERC721, ERC721Votes)␊
        {␊
            super._increaseBalance(account, value);␊
        }␊
    }␊
    `

## votes + blocknumber

> Snapshot 1

    `// SPDX-License-Identifier: MIT␊
    // Compatible with OpenZeppelin Contracts ^5.0.0␊
    pragma solidity ^0.8.22;␊
    ␊
    import "@openzeppelin/contracts/token/ERC721/ERC721.sol";␊
    import "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊
    import "@openzeppelin/contracts/token/ERC721/extensions/ERC721Votes.sol";␊
    ␊
    contract MyToken is ERC721, EIP712, ERC721Votes {␊
        constructor() ERC721("MyToken", "MTK") EIP712("MyToken", "1") {}␊
    ␊
        // The following functions are overrides required by Solidity.␊
    ␊
        function _update(address to, uint256 tokenId, address auth)␊
            internal␊
            override(ERC721, ERC721Votes)␊
            returns (address)␊
        {␊
            return super._update(to, tokenId, auth);␊
        }␊
    ␊
        function _increaseBalance(address account, uint128 value)␊
            internal␊
            override(ERC721, ERC721Votes)␊
        {␊
            super._increaseBalance(account, value);␊
        }␊
    }␊
    `

## votes + timestamp

> Snapshot 1

    `// SPDX-License-Identifier: MIT␊
    // Compatible with OpenZeppelin Contracts ^5.0.0␊
    pragma solidity ^0.8.22;␊
    ␊
    import "@openzeppelin/contracts/token/ERC721/ERC721.sol";␊
    import "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊
    import "@openzeppelin/contracts/token/ERC721/extensions/ERC721Votes.sol";␊
    ␊
    contract MyToken is ERC721, EIP712, ERC721Votes {␊
        constructor() ERC721("MyToken", "MTK") EIP712("MyToken", "1") {}␊
    ␊
        function clock() public view override returns (uint48) {␊
            return uint48(block.timestamp);␊
        }␊
    ␊
        // solhint-disable-next-line func-name-mixedcase␊
        function CLOCK_MODE() public pure override returns (string memory) {␊
            return "mode=timestamp";␊
        }␊
    ␊
        // The following functions are overrides required by Solidity.␊
    ␊
        function _update(address to, uint256 tokenId, address auth)␊
            internal␊
            override(ERC721, ERC721Votes)␊
            returns (address)␊
        {␊
            return super._update(to, tokenId, auth);␊
        }␊
    ␊
        function _increaseBalance(address account, uint128 value)␊
            internal␊
            override(ERC721, ERC721Votes)␊
        {␊
            super._increaseBalance(account, value);␊
        }␊
    }␊
    `

## full upgradeable transparent

> Snapshot 1

    `// SPDX-License-Identifier: MIT␊
    // Compatible with OpenZeppelin Contracts ^5.0.0␊
    pragma solidity ^0.8.22;␊
    ␊
    import "@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol";␊
    import "@openzeppelin/contracts-upgradeable/token/ERC721/extensions/ERC721EnumerableUpgradeable.sol";␊
    import "@openzeppelin/contracts-upgradeable/token/ERC721/extensions/ERC721PausableUpgradeable.sol";␊
    import "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol";␊
    import "@openzeppelin/contracts-upgradeable/token/ERC721/extensions/ERC721BurnableUpgradeable.sol";␊
    import "@openzeppelin/contracts-upgradeable/utils/cryptography/EIP712Upgradeable.sol";␊
    import "@openzeppelin/contracts-upgradeable/token/ERC721/extensions/ERC721VotesUpgradeable.sol";␊
    import "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol";␊
    ␊
    contract MyToken is Initializable, ERC721Upgradeable, ERC721EnumerableUpgradeable, ERC721PausableUpgradeable, OwnableUpgradeable, ERC721BurnableUpgradeable, EIP712Upgradeable, ERC721VotesUpgradeable {␊
        /// @custom:oz-upgrades-unsafe-allow constructor␊
        constructor() {␊
            _disableInitializers();␊
        }␊
    ␊
        function initialize(address initialOwner) initializer public {␊
            __ERC721_init("MyToken", "MTK");␊
            __ERC721Enumerable_init();␊
            __ERC721Pausable_init();␊
            __Ownable_init(initialOwner);␊
            __ERC721Burnable_init();␊
            __EIP712_init("MyToken", "1");␊
            __ERC721Votes_init();␊
        }␊
    ␊
        function pause() public onlyOwner {␊
            _pause();␊
        }␊
    ␊
        function unpause() public onlyOwner {␊
            _unpause();␊
        }␊
    ␊
        function safeMint(address to, uint256 tokenId) public onlyOwner {␊
            _safeMint(to, tokenId);␊
        }␊
    ␊
        // The following functions are overrides required by Solidity.␊
    ␊
        function _update(address to, uint256 tokenId, address auth)␊
            internal␊
            override(ERC721Upgradeable, ERC721EnumerableUpgradeable, ERC721PausableUpgradeable, ERC721VotesUpgradeable)␊
            returns (address)␊
        {␊
            return super._update(to, tokenId, auth);␊
        }␊
    ␊
        function _increaseBalance(address account, uint128 value)␊
            internal␊
            override(ERC721Upgradeable, ERC721EnumerableUpgradeable, ERC721VotesUpgradeable)␊
        {␊
            super._increaseBalance(account, value);␊
        }␊
    ␊
        function supportsInterface(bytes4 interfaceId)␊
            public␊
            view␊
            override(ERC721Upgradeable, ERC721EnumerableUpgradeable)␊
            returns (bool)␊
        {␊
            return super.supportsInterface(interfaceId);␊
        }␊
    }␊
    `

## full upgradeable uups

> Snapshot 1

    `// SPDX-License-Identifier: MIT␊
    // Compatible with OpenZeppelin Contracts ^5.0.0␊
    pragma solidity ^0.8.22;␊
    ␊
    import "@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol";␊
    import "@openzeppelin/contracts-upgradeable/token/ERC721/extensions/ERC721EnumerableUpgradeable.sol";␊
    import "@openzeppelin/contracts-upgradeable/token/ERC721/extensions/ERC721PausableUpgradeable.sol";␊
    import "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol";␊
    import "@openzeppelin/contracts-upgradeable/token/ERC721/extensions/ERC721BurnableUpgradeable.sol";␊
    import "@openzeppelin/contracts-upgradeable/utils/cryptography/EIP712Upgradeable.sol";␊
    import "@openzeppelin/contracts-upgradeable/token/ERC721/extensions/ERC721VotesUpgradeable.sol";␊
    import "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol";␊
    import "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol";␊
    ␊
    contract MyToken is Initializable, ERC721Upgradeable, ERC721EnumerableUpgradeable, ERC721PausableUpgradeable, OwnableUpgradeable, ERC721BurnableUpgradeable, EIP712Upgradeable, ERC721VotesUpgradeable, UUPSUpgradeable {␊
        /// @custom:oz-upgrades-unsafe-allow constructor␊
        constructor() {␊
            _disableInitializers();␊
        }␊
    ␊
        function initialize(address initialOwner) initializer public {␊
            __ERC721_init("MyToken", "MTK");␊
            __ERC721Enumerable_init();␊
            __ERC721Pausable_init();␊
            __Ownable_init(initialOwner);␊
            __ERC721Burnable_init();␊
            __EIP712_init("MyToken", "1");␊
            __ERC721Votes_init();␊
            __UUPSUpgradeable_init();␊
        }␊
    ␊
        function pause() public onlyOwner {␊
            _pause();␊
        }␊
    ␊
        function unpause() public onlyOwner {␊
            _unpause();␊
        }␊
    ␊
        function safeMint(address to, uint256 tokenId) public onlyOwner {␊
            _safeMint(to, tokenId);␊
        }␊
    ␊
        function _authorizeUpgrade(address newImplementation)␊
            internal␊
            onlyOwner␊
            override␊
        {}␊
    ␊
        // The following functions are overrides required by Solidity.␊
    ␊
        function _update(address to, uint256 tokenId, address auth)␊
            internal␊
            override(ERC721Upgradeable, ERC721EnumerableUpgradeable, ERC721PausableUpgradeable, ERC721VotesUpgradeable)␊
            returns (address)␊
        {␊
            return super._update(to, tokenId, auth);␊
        }␊
    ␊
        function _increaseBalance(address account, uint128 value)␊
            internal␊
            override(ERC721Upgradeable, ERC721EnumerableUpgradeable, ERC721VotesUpgradeable)␊
        {␊
            super._increaseBalance(account, value);␊
        }␊
    ␊
        function supportsInterface(bytes4 interfaceId)␊
            public␊
            view␊
            override(ERC721Upgradeable, ERC721EnumerableUpgradeable)␊
            returns (bool)␊
        {␊
            return super.supportsInterface(interfaceId);␊
        }␊
    }␊
    `

## full upgradeable uups + managed

> Snapshot 1

    `// SPDX-License-Identifier: MIT␊
    // Compatible with OpenZeppelin Contracts ^5.0.0␊
    pragma solidity ^0.8.22;␊
    ␊
    import "@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol";␊
    import "@openzeppelin/contracts-upgradeable/token/ERC721/extensions/ERC721EnumerableUpgradeable.sol";␊
    import "@openzeppelin/contracts-upgradeable/token/ERC721/extensions/ERC721PausableUpgradeable.sol";␊
    import "@openzeppelin/contracts-upgradeable/access/manager/AccessManagedUpgradeable.sol";␊
    import "@openzeppelin/contracts-upgradeable/token/ERC721/extensions/ERC721BurnableUpgradeable.sol";␊
    import "@openzeppelin/contracts-upgradeable/utils/cryptography/EIP712Upgradeable.sol";␊
    import "@openzeppelin/contracts-upgradeable/token/ERC721/extensions/ERC721VotesUpgradeable.sol";␊
    import "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol";␊
    import "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol";␊
    ␊
    contract MyToken is Initializable, ERC721Upgradeable, ERC721EnumerableUpgradeable, ERC721PausableUpgradeable, AccessManagedUpgradeable, ERC721BurnableUpgradeable, EIP712Upgradeable, ERC721VotesUpgradeable, UUPSUpgradeable {␊
        /// @custom:oz-upgrades-unsafe-allow constructor␊
        constructor() {␊
            _disableInitializers();␊
        }␊
    ␊
        function initialize(address initialAuthority) initializer public {␊
            __ERC721_init("MyToken", "MTK");␊
            __ERC721Enumerable_init();␊
            __ERC721Pausable_init();␊
            __AccessManaged_init(initialAuthority);␊
            __ERC721Burnable_init();␊
            __EIP712_init("MyToken", "1");␊
            __ERC721Votes_init();␊
            __UUPSUpgradeable_init();␊
        }␊
    ␊
        function pause() public restricted {␊
            _pause();␊
        }␊
    ␊
        function unpause() public restricted {␊
            _unpause();␊
        }␊
    ␊
        function safeMint(address to, uint256 tokenId) public restricted {␊
            _safeMint(to, tokenId);␊
        }␊
    ␊
        function _authorizeUpgrade(address newImplementation)␊
            internal␊
            restricted␊
            override␊
        {}␊
    ␊
        // The following functions are overrides required by Solidity.␊
    ␊
        function _update(address to, uint256 tokenId, address auth)␊
            internal␊
            override(ERC721Upgradeable, ERC721EnumerableUpgradeable, ERC721PausableUpgradeable, ERC721VotesUpgradeable)␊
            returns (address)␊
        {␊
            return super._update(to, tokenId, auth);␊
        }␊
    ␊
        function _increaseBalance(address account, uint128 value)␊
            internal␊
            override(ERC721Upgradeable, ERC721EnumerableUpgradeable, ERC721VotesUpgradeable)␊
        {␊
            super._increaseBalance(account, value);␊
        }␊
    ␊
        function supportsInterface(bytes4 interfaceId)␊
            public␊
            view␊
            override(ERC721Upgradeable, ERC721EnumerableUpgradeable)␊
            returns (bool)␊
        {␊
            return super.supportsInterface(interfaceId);␊
        }␊
    }␊
    `
