{
  "contractName": "Initializable",
  "abi": [
    {
      "inputs": [],
      "name": "InvalidInitialization",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "NotInitializing",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint64",
          "name": "version",
          "type": "uint64"
        }
      ],
      "name": "Initialized",
      "type": "event"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.8.25+commit.b61c2a91\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"}],\"devdoc\":{\"custom:oz-upgrades-unsafe-allow\":\"constructor constructor() {     _disableInitializers(); } ``` ====\",\"details\":\"This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer function so it can only be called once. The {initializer} modifier provided by this contract will have this effect. The initialization functions use a version number. Once a version number is used, it is consumed and cannot be reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in case an upgrade adds a module that needs to be initialized. For example: [.hljs-theme-light.nopadding] ```solidity contract MyToken is ERC20Upgradeable {     function initialize() initializer public {         __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");     } } contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {     function initializeV2() reinitializer(2) public {         __ERC20Permit_init(\\\"MyToken\\\");     } } ``` TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}. CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure that all initializers are idempotent. This is not verified automatically as constructors are by Solidity. [CAUTION] ==== Avoid leaving a contract uninitialized. An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke the {_disableInitializers} function in the constructor to automatically lock it when it is deployed: [.hljs-theme-light.nopadding] ```\",\"errors\":{\"InvalidInitialization()\":[{\"details\":\"The contract is already initialized.\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}]},\"events\":{\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"}},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":\"Initializable\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609\",\"dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM\"]}},\"version\":1}",
  "bytecode": "0x",
  "deployedBytecode": "0x",
  "immutableReferences": {},
  "generatedSources": [],
  "deployedGeneratedSources": [],
  "sourceMap": "",
  "deployedSourceMap": "",
  "source": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (proxy/utils/Initializable.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\n *\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\n * reused. This mechanism prevents re-execution of each \"step\" but allows the creation of new initialization steps in\n * case an upgrade adds a module that needs to be initialized.\n *\n * For example:\n *\n * [.hljs-theme-light.nopadding]\n * ```solidity\n * contract MyToken is ERC20Upgradeable {\n *     function initialize() initializer public {\n *         __ERC20_init(\"MyToken\", \"MTK\");\n *     }\n * }\n *\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\n *     function initializeV2() reinitializer(2) public {\n *         __ERC20Permit_init(\"MyToken\");\n *     }\n * }\n * ```\n *\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\n *\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\n *\n * [CAUTION]\n * ====\n * Avoid leaving a contract uninitialized.\n *\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\n *\n * [.hljs-theme-light.nopadding]\n * ```\n * /// @custom:oz-upgrades-unsafe-allow constructor\n * constructor() {\n *     _disableInitializers();\n * }\n * ```\n * ====\n */\nabstract contract Initializable {\n    /**\n     * @dev Storage of the initializable contract.\n     *\n     * It's implemented on a custom ERC-7201 namespace to reduce the risk of storage collisions\n     * when using with upgradeable contracts.\n     *\n     * @custom:storage-location erc7201:openzeppelin.storage.Initializable\n     */\n    struct InitializableStorage {\n        /**\n         * @dev Indicates that the contract has been initialized.\n         */\n        uint64 _initialized;\n        /**\n         * @dev Indicates that the contract is in the process of being initialized.\n         */\n        bool _initializing;\n    }\n\n    // keccak256(abi.encode(uint256(keccak256(\"openzeppelin.storage.Initializable\")) - 1)) & ~bytes32(uint256(0xff))\n    bytes32 private constant INITIALIZABLE_STORAGE = 0xf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00;\n\n    /**\n     * @dev The contract is already initialized.\n     */\n    error InvalidInitialization();\n\n    /**\n     * @dev The contract is not initializing.\n     */\n    error NotInitializing();\n\n    /**\n     * @dev Triggered when the contract has been initialized or reinitialized.\n     */\n    event Initialized(uint64 version);\n\n    /**\n     * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\n     * `onlyInitializing` functions can be used to initialize parent contracts.\n     *\n     * Similar to `reinitializer(1)`, except that in the context of a constructor an `initializer` may be invoked any\n     * number of times. This behavior in the constructor can be useful during testing and is not expected to be used in\n     * production.\n     *\n     * Emits an {Initialized} event.\n     */\n    modifier initializer() {\n        // solhint-disable-next-line var-name-mixedcase\n        InitializableStorage storage $ = _getInitializableStorage();\n\n        // Cache values to avoid duplicated sloads\n        bool isTopLevelCall = !$._initializing;\n        uint64 initialized = $._initialized;\n\n        // Allowed calls:\n        // - initialSetup: the contract is not in the initializing state and no previous version was\n        //                 initialized\n        // - construction: the contract is initialized at version 1 (no reininitialization) and the\n        //                 current contract is just being deployed\n        bool initialSetup = initialized == 0 && isTopLevelCall;\n        bool construction = initialized == 1 && address(this).code.length == 0;\n\n        if (!initialSetup && !construction) {\n            revert InvalidInitialization();\n        }\n        $._initialized = 1;\n        if (isTopLevelCall) {\n            $._initializing = true;\n        }\n        _;\n        if (isTopLevelCall) {\n            $._initializing = false;\n            emit Initialized(1);\n        }\n    }\n\n    /**\n     * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\n     * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\n     * used to initialize parent contracts.\n     *\n     * A reinitializer may be used after the original initialization step. This is essential to configure modules that\n     * are added through upgrades and that require initialization.\n     *\n     * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\n     * cannot be nested. If one is invoked in the context of another, execution will revert.\n     *\n     * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\n     * a contract, executing them in the right order is up to the developer or operator.\n     *\n     * WARNING: Setting the version to 2**64 - 1 will prevent any future reinitialization.\n     *\n     * Emits an {Initialized} event.\n     */\n    modifier reinitializer(uint64 version) {\n        // solhint-disable-next-line var-name-mixedcase\n        InitializableStorage storage $ = _getInitializableStorage();\n\n        if ($._initializing || $._initialized >= version) {\n            revert InvalidInitialization();\n        }\n        $._initialized = version;\n        $._initializing = true;\n        _;\n        $._initializing = false;\n        emit Initialized(version);\n    }\n\n    /**\n     * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\n     * {initializer} and {reinitializer} modifiers, directly or indirectly.\n     */\n    modifier onlyInitializing() {\n        _checkInitializing();\n        _;\n    }\n\n    /**\n     * @dev Reverts if the contract is not in an initializing state. See {onlyInitializing}.\n     */\n    function _checkInitializing() internal view virtual {\n        if (!_isInitializing()) {\n            revert NotInitializing();\n        }\n    }\n\n    /**\n     * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\n     * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\n     * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\n     * through proxies.\n     *\n     * Emits an {Initialized} event the first time it is successfully executed.\n     */\n    function _disableInitializers() internal virtual {\n        // solhint-disable-next-line var-name-mixedcase\n        InitializableStorage storage $ = _getInitializableStorage();\n\n        if ($._initializing) {\n            revert InvalidInitialization();\n        }\n        if ($._initialized != type(uint64).max) {\n            $._initialized = type(uint64).max;\n            emit Initialized(type(uint64).max);\n        }\n    }\n\n    /**\n     * @dev Returns the highest version that has been initialized. See {reinitializer}.\n     */\n    function _getInitializedVersion() internal view returns (uint64) {\n        return _getInitializableStorage()._initialized;\n    }\n\n    /**\n     * @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}.\n     */\n    function _isInitializing() internal view returns (bool) {\n        return _getInitializableStorage()._initializing;\n    }\n\n    /**\n     * @dev Returns a pointer to the storage namespace.\n     */\n    // solhint-disable-next-line var-name-mixedcase\n    function _getInitializableStorage() private pure returns (InitializableStorage storage $) {\n        assembly {\n            $.slot := INITIALIZABLE_STORAGE\n        }\n    }\n}\n",
  "sourcePath": "@openzeppelin\\contracts-upgradeable\\proxy\\utils\\Initializable.sol",
  "ast": {
    "absolutePath": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol",
    "exportedSymbols": {
      "Initializable": [
        253
      ]
    },
    "id": 254,
    "license": "MIT",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 1,
        "literals": [
          "solidity",
          "^",
          "0.8",
          ".20"
        ],
        "nodeType": "PragmaDirective",
        "src": "113:24:0"
      },
      {
        "abstract": true,
        "baseContracts": [],
        "canonicalName": "Initializable",
        "contractDependencies": [],
        "contractKind": "contract",
        "documentation": {
          "id": 2,
          "nodeType": "StructuredDocumentation",
          "src": "139:2209:0",
          "text": " @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\n behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\n external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\n function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\n The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\n reused. This mechanism prevents re-execution of each \"step\" but allows the creation of new initialization steps in\n case an upgrade adds a module that needs to be initialized.\n For example:\n [.hljs-theme-light.nopadding]\n ```solidity\n contract MyToken is ERC20Upgradeable {\n     function initialize() initializer public {\n         __ERC20_init(\"MyToken\", \"MTK\");\n     }\n }\n contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\n     function initializeV2() reinitializer(2) public {\n         __ERC20Permit_init(\"MyToken\");\n     }\n }\n ```\n TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\n possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\n CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\n that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\n [CAUTION]\n ====\n Avoid leaving a contract uninitialized.\n An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\n contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\n the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\n [.hljs-theme-light.nopadding]\n ```\n /// @custom:oz-upgrades-unsafe-allow constructor\n constructor() {\n     _disableInitializers();\n }\n ```\n ===="
        },
        "fullyImplemented": true,
        "id": 253,
        "linearizedBaseContracts": [
          253
        ],
        "name": "Initializable",
        "nameLocation": "2367:13:0",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "canonicalName": "Initializable.InitializableStorage",
            "documentation": {
              "id": 3,
              "nodeType": "StructuredDocumentation",
              "src": "2387:293:0",
              "text": " @dev Storage of the initializable contract.\n It's implemented on a custom ERC-7201 namespace to reduce the risk of storage collisions\n when using with upgradeable contracts.\n @custom:storage-location erc7201:openzeppelin.storage.Initializable"
            },
            "id": 10,
            "members": [
              {
                "constant": false,
                "id": 6,
                "mutability": "mutable",
                "name": "_initialized",
                "nameLocation": "2820:12:0",
                "nodeType": "VariableDeclaration",
                "scope": 10,
                "src": "2813:19:0",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint64",
                  "typeString": "uint64"
                },
                "typeName": {
                  "id": 5,
                  "name": "uint64",
                  "nodeType": "ElementaryTypeName",
                  "src": "2813:6:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 9,
                "mutability": "mutable",
                "name": "_initializing",
                "nameLocation": "2955:13:0",
                "nodeType": "VariableDeclaration",
                "scope": 10,
                "src": "2950:18:0",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bool",
                  "typeString": "bool"
                },
                "typeName": {
                  "id": 8,
                  "name": "bool",
                  "nodeType": "ElementaryTypeName",
                  "src": "2950:4:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  }
                },
                "visibility": "internal"
              }
            ],
            "name": "InitializableStorage",
            "nameLocation": "2692:20:0",
            "nodeType": "StructDefinition",
            "scope": 253,
            "src": "2685:290:0",
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 13,
            "mutability": "constant",
            "name": "INITIALIZABLE_STORAGE",
            "nameLocation": "3123:21:0",
            "nodeType": "VariableDeclaration",
            "scope": 253,
            "src": "3098:115:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 11,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "3098:7:0",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "hexValue": "307866306335376531363834306466303430663135303838646332663831666533393163333932336265633733653233613936363265666339633232396336613030",
              "id": 12,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "3147:66:0",
              "typeDescriptions": {
                "typeIdentifier": "t_rational_108904022758810753673719992590105913556127789646572562039383141376366747609600_by_1",
                "typeString": "int_const 1089...(70 digits omitted)...9600"
              },
              "value": "0xf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00"
            },
            "visibility": "private"
          },
          {
            "documentation": {
              "id": 14,
              "nodeType": "StructuredDocumentation",
              "src": "3220:60:0",
              "text": " @dev The contract is already initialized."
            },
            "errorSelector": "f92ee8a9",
            "id": 16,
            "name": "InvalidInitialization",
            "nameLocation": "3291:21:0",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 15,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3312:2:0"
            },
            "src": "3285:30:0"
          },
          {
            "documentation": {
              "id": 17,
              "nodeType": "StructuredDocumentation",
              "src": "3321:57:0",
              "text": " @dev The contract is not initializing."
            },
            "errorSelector": "d7e6bcf8",
            "id": 19,
            "name": "NotInitializing",
            "nameLocation": "3389:15:0",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 18,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3404:2:0"
            },
            "src": "3383:24:0"
          },
          {
            "anonymous": false,
            "documentation": {
              "id": 20,
              "nodeType": "StructuredDocumentation",
              "src": "3413:90:0",
              "text": " @dev Triggered when the contract has been initialized or reinitialized."
            },
            "eventSelector": "c7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2",
            "id": 24,
            "name": "Initialized",
            "nameLocation": "3514:11:0",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 23,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 22,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "version",
                  "nameLocation": "3533:7:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 24,
                  "src": "3526:14:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 21,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "3526:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3525:16:0"
            },
            "src": "3508:34:0"
          },
          {
            "body": {
              "id": 106,
              "nodeType": "Block",
              "src": "4092:1081:0",
              "statements": [
                {
                  "assignments": [
                    29
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 29,
                      "mutability": "mutable",
                      "name": "$",
                      "nameLocation": "4187:1:0",
                      "nodeType": "VariableDeclaration",
                      "scope": 106,
                      "src": "4158:30:0",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_InitializableStorage_$10_storage_ptr",
                        "typeString": "struct Initializable.InitializableStorage"
                      },
                      "typeName": {
                        "id": 28,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 27,
                          "name": "InitializableStorage",
                          "nameLocations": [
                            "4158:20:0"
                          ],
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 10,
                          "src": "4158:20:0"
                        },
                        "referencedDeclaration": 10,
                        "src": "4158:20:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_InitializableStorage_$10_storage_ptr",
                          "typeString": "struct Initializable.InitializableStorage"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 32,
                  "initialValue": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 30,
                      "name": "_getInitializableStorage",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 252,
                      "src": "4191:24:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$__$returns$_t_struct$_InitializableStorage_$10_storage_ptr_$",
                        "typeString": "function () pure returns (struct Initializable.InitializableStorage storage pointer)"
                      }
                    },
                    "id": 31,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4191:26:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_InitializableStorage_$10_storage_ptr",
                      "typeString": "struct Initializable.InitializableStorage storage pointer"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4158:59:0"
                },
                {
                  "assignments": [
                    34
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 34,
                      "mutability": "mutable",
                      "name": "isTopLevelCall",
                      "nameLocation": "4284:14:0",
                      "nodeType": "VariableDeclaration",
                      "scope": 106,
                      "src": "4279:19:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 33,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "4279:4:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 38,
                  "initialValue": {
                    "id": 37,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "4301:16:0",
                    "subExpression": {
                      "expression": {
                        "id": 35,
                        "name": "$",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 29,
                        "src": "4302:1:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_InitializableStorage_$10_storage_ptr",
                          "typeString": "struct Initializable.InitializableStorage storage pointer"
                        }
                      },
                      "id": 36,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "4304:13:0",
                      "memberName": "_initializing",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 9,
                      "src": "4302:15:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4279:38:0"
                },
                {
                  "assignments": [
                    40
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 40,
                      "mutability": "mutable",
                      "name": "initialized",
                      "nameLocation": "4334:11:0",
                      "nodeType": "VariableDeclaration",
                      "scope": 106,
                      "src": "4327:18:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      },
                      "typeName": {
                        "id": 39,
                        "name": "uint64",
                        "nodeType": "ElementaryTypeName",
                        "src": "4327:6:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 43,
                  "initialValue": {
                    "expression": {
                      "id": 41,
                      "name": "$",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 29,
                      "src": "4348:1:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_InitializableStorage_$10_storage_ptr",
                        "typeString": "struct Initializable.InitializableStorage storage pointer"
                      }
                    },
                    "id": 42,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberLocation": "4350:12:0",
                    "memberName": "_initialized",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 6,
                    "src": "4348:14:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4327:35:0"
                },
                {
                  "assignments": [
                    45
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 45,
                      "mutability": "mutable",
                      "name": "initialSetup",
                      "nameLocation": "4711:12:0",
                      "nodeType": "VariableDeclaration",
                      "scope": 106,
                      "src": "4706:17:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 44,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "4706:4:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 51,
                  "initialValue": {
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 50,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      },
                      "id": 48,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 46,
                        "name": "initialized",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 40,
                        "src": "4726:11:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "hexValue": "30",
                        "id": 47,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4741:1:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "4726:16:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "id": 49,
                      "name": "isTopLevelCall",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 34,
                      "src": "4746:14:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "4726:34:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4706:54:0"
                },
                {
                  "assignments": [
                    53
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 53,
                      "mutability": "mutable",
                      "name": "construction",
                      "nameLocation": "4775:12:0",
                      "nodeType": "VariableDeclaration",
                      "scope": 106,
                      "src": "4770:17:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 52,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "4770:4:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 66,
                  "initialValue": {
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 65,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      },
                      "id": 56,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 54,
                        "name": "initialized",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 40,
                        "src": "4790:11:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "hexValue": "31",
                        "id": 55,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4805:1:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      },
                      "src": "4790:16:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 64,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "expression": {
                          "expression": {
                            "arguments": [
                              {
                                "id": 59,
                                "name": "this",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4294967268,
                                "src": "4818:4:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_Initializable_$253",
                                  "typeString": "contract Initializable"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_Initializable_$253",
                                  "typeString": "contract Initializable"
                                }
                              ],
                              "id": 58,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "4810:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 57,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "4810:7:0",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 60,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "4810:13:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "id": 61,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "4824:4:0",
                          "memberName": "code",
                          "nodeType": "MemberAccess",
                          "src": "4810:18:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "id": 62,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "4829:6:0",
                        "memberName": "length",
                        "nodeType": "MemberAccess",
                        "src": "4810:25:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "hexValue": "30",
                        "id": 63,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4839:1:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "4810:30:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "4790:50:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4770:70:0"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 71,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 68,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "!",
                      "prefix": true,
                      "src": "4855:13:0",
                      "subExpression": {
                        "id": 67,
                        "name": "initialSetup",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 45,
                        "src": "4856:12:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "id": 70,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "!",
                      "prefix": true,
                      "src": "4872:13:0",
                      "subExpression": {
                        "id": 69,
                        "name": "construction",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 53,
                        "src": "4873:12:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "4855:30:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 76,
                  "nodeType": "IfStatement",
                  "src": "4851:91:0",
                  "trueBody": {
                    "id": 75,
                    "nodeType": "Block",
                    "src": "4887:55:0",
                    "statements": [
                      {
                        "errorCall": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 72,
                            "name": "InvalidInitialization",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 16,
                            "src": "4908:21:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_error_pure$__$returns$__$",
                              "typeString": "function () pure"
                            }
                          },
                          "id": 73,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4908:23:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 74,
                        "nodeType": "RevertStatement",
                        "src": "4901:30:0"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "id": 81,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "id": 77,
                        "name": "$",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 29,
                        "src": "4951:1:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_InitializableStorage_$10_storage_ptr",
                          "typeString": "struct Initializable.InitializableStorage storage pointer"
                        }
                      },
                      "id": 79,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberLocation": "4953:12:0",
                      "memberName": "_initialized",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6,
                      "src": "4951:14:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "hexValue": "31",
                      "id": 80,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "4968:1:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "src": "4951:18:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 82,
                  "nodeType": "ExpressionStatement",
                  "src": "4951:18:0"
                },
                {
                  "condition": {
                    "id": 83,
                    "name": "isTopLevelCall",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 34,
                    "src": "4983:14:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 91,
                  "nodeType": "IfStatement",
                  "src": "4979:67:0",
                  "trueBody": {
                    "id": 90,
                    "nodeType": "Block",
                    "src": "4999:47:0",
                    "statements": [
                      {
                        "expression": {
                          "id": 88,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "id": 84,
                              "name": "$",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 29,
                              "src": "5013:1:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_InitializableStorage_$10_storage_ptr",
                                "typeString": "struct Initializable.InitializableStorage storage pointer"
                              }
                            },
                            "id": 86,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberLocation": "5015:13:0",
                            "memberName": "_initializing",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 9,
                            "src": "5013:15:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "hexValue": "74727565",
                            "id": 87,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "bool",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "5031:4:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "value": "true"
                          },
                          "src": "5013:22:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 89,
                        "nodeType": "ExpressionStatement",
                        "src": "5013:22:0"
                      }
                    ]
                  }
                },
                {
                  "id": 92,
                  "nodeType": "PlaceholderStatement",
                  "src": "5055:1:0"
                },
                {
                  "condition": {
                    "id": 93,
                    "name": "isTopLevelCall",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 34,
                    "src": "5070:14:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 105,
                  "nodeType": "IfStatement",
                  "src": "5066:101:0",
                  "trueBody": {
                    "id": 104,
                    "nodeType": "Block",
                    "src": "5086:81:0",
                    "statements": [
                      {
                        "expression": {
                          "id": 98,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "id": 94,
                              "name": "$",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 29,
                              "src": "5100:1:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_InitializableStorage_$10_storage_ptr",
                                "typeString": "struct Initializable.InitializableStorage storage pointer"
                              }
                            },
                            "id": 96,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberLocation": "5102:13:0",
                            "memberName": "_initializing",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 9,
                            "src": "5100:15:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "hexValue": "66616c7365",
                            "id": 97,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "bool",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "5118:5:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "value": "false"
                          },
                          "src": "5100:23:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 99,
                        "nodeType": "ExpressionStatement",
                        "src": "5100:23:0"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "hexValue": "31",
                              "id": 101,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "5154:1:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              }
                            ],
                            "id": 100,
                            "name": "Initialized",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 24,
                            "src": "5142:11:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_uint64_$returns$__$",
                              "typeString": "function (uint64)"
                            }
                          },
                          "id": 102,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5142:14:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 103,
                        "nodeType": "EmitStatement",
                        "src": "5137:19:0"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": {
              "id": 25,
              "nodeType": "StructuredDocumentation",
              "src": "3548:516:0",
              "text": " @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\n `onlyInitializing` functions can be used to initialize parent contracts.\n Similar to `reinitializer(1)`, except that in the context of a constructor an `initializer` may be invoked any\n number of times. This behavior in the constructor can be useful during testing and is not expected to be used in\n production.\n Emits an {Initialized} event."
            },
            "id": 107,
            "name": "initializer",
            "nameLocation": "4078:11:0",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 26,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4089:2:0"
            },
            "src": "4069:1104:0",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 153,
              "nodeType": "Block",
              "src": "6291:392:0",
              "statements": [
                {
                  "assignments": [
                    114
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 114,
                      "mutability": "mutable",
                      "name": "$",
                      "nameLocation": "6386:1:0",
                      "nodeType": "VariableDeclaration",
                      "scope": 153,
                      "src": "6357:30:0",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_InitializableStorage_$10_storage_ptr",
                        "typeString": "struct Initializable.InitializableStorage"
                      },
                      "typeName": {
                        "id": 113,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 112,
                          "name": "InitializableStorage",
                          "nameLocations": [
                            "6357:20:0"
                          ],
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 10,
                          "src": "6357:20:0"
                        },
                        "referencedDeclaration": 10,
                        "src": "6357:20:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_InitializableStorage_$10_storage_ptr",
                          "typeString": "struct Initializable.InitializableStorage"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 117,
                  "initialValue": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 115,
                      "name": "_getInitializableStorage",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 252,
                      "src": "6390:24:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$__$returns$_t_struct$_InitializableStorage_$10_storage_ptr_$",
                        "typeString": "function () pure returns (struct Initializable.InitializableStorage storage pointer)"
                      }
                    },
                    "id": 116,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6390:26:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_InitializableStorage_$10_storage_ptr",
                      "typeString": "struct Initializable.InitializableStorage storage pointer"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6357:59:0"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 124,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 118,
                        "name": "$",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 114,
                        "src": "6431:1:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_InitializableStorage_$10_storage_ptr",
                          "typeString": "struct Initializable.InitializableStorage storage pointer"
                        }
                      },
                      "id": 119,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "6433:13:0",
                      "memberName": "_initializing",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 9,
                      "src": "6431:15:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "||",
                    "rightExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      },
                      "id": 123,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "expression": {
                          "id": 120,
                          "name": "$",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 114,
                          "src": "6450:1:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_InitializableStorage_$10_storage_ptr",
                            "typeString": "struct Initializable.InitializableStorage storage pointer"
                          }
                        },
                        "id": 121,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "6452:12:0",
                        "memberName": "_initialized",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 6,
                        "src": "6450:14:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": ">=",
                      "rightExpression": {
                        "id": 122,
                        "name": "version",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 110,
                        "src": "6468:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "src": "6450:25:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "6431:44:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 129,
                  "nodeType": "IfStatement",
                  "src": "6427:105:0",
                  "trueBody": {
                    "id": 128,
                    "nodeType": "Block",
                    "src": "6477:55:0",
                    "statements": [
                      {
                        "errorCall": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 125,
                            "name": "InvalidInitialization",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 16,
                            "src": "6498:21:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_error_pure$__$returns$__$",
                              "typeString": "function () pure"
                            }
                          },
                          "id": 126,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6498:23:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 127,
                        "nodeType": "RevertStatement",
                        "src": "6491:30:0"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "id": 134,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "id": 130,
                        "name": "$",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 114,
                        "src": "6541:1:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_InitializableStorage_$10_storage_ptr",
                          "typeString": "struct Initializable.InitializableStorage storage pointer"
                        }
                      },
                      "id": 132,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberLocation": "6543:12:0",
                      "memberName": "_initialized",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6,
                      "src": "6541:14:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 133,
                      "name": "version",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 110,
                      "src": "6558:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "6541:24:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 135,
                  "nodeType": "ExpressionStatement",
                  "src": "6541:24:0"
                },
                {
                  "expression": {
                    "id": 140,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "id": 136,
                        "name": "$",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 114,
                        "src": "6575:1:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_InitializableStorage_$10_storage_ptr",
                          "typeString": "struct Initializable.InitializableStorage storage pointer"
                        }
                      },
                      "id": 138,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberLocation": "6577:13:0",
                      "memberName": "_initializing",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 9,
                      "src": "6575:15:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "hexValue": "74727565",
                      "id": 139,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "6593:4:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "true"
                    },
                    "src": "6575:22:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 141,
                  "nodeType": "ExpressionStatement",
                  "src": "6575:22:0"
                },
                {
                  "id": 142,
                  "nodeType": "PlaceholderStatement",
                  "src": "6607:1:0"
                },
                {
                  "expression": {
                    "id": 147,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "id": 143,
                        "name": "$",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 114,
                        "src": "6618:1:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_InitializableStorage_$10_storage_ptr",
                          "typeString": "struct Initializable.InitializableStorage storage pointer"
                        }
                      },
                      "id": 145,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberLocation": "6620:13:0",
                      "memberName": "_initializing",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 9,
                      "src": "6618:15:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "hexValue": "66616c7365",
                      "id": 146,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "6636:5:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "false"
                    },
                    "src": "6618:23:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 148,
                  "nodeType": "ExpressionStatement",
                  "src": "6618:23:0"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 150,
                        "name": "version",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 110,
                        "src": "6668:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      ],
                      "id": 149,
                      "name": "Initialized",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 24,
                      "src": "6656:11:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint64_$returns$__$",
                        "typeString": "function (uint64)"
                      }
                    },
                    "id": 151,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6656:20:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 152,
                  "nodeType": "EmitStatement",
                  "src": "6651:25:0"
                }
              ]
            },
            "documentation": {
              "id": 108,
              "nodeType": "StructuredDocumentation",
              "src": "5179:1068:0",
              "text": " @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\n contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\n used to initialize parent contracts.\n A reinitializer may be used after the original initialization step. This is essential to configure modules that\n are added through upgrades and that require initialization.\n When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\n cannot be nested. If one is invoked in the context of another, execution will revert.\n Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\n a contract, executing them in the right order is up to the developer or operator.\n WARNING: Setting the version to 2**64 - 1 will prevent any future reinitialization.\n Emits an {Initialized} event."
            },
            "id": 154,
            "name": "reinitializer",
            "nameLocation": "6261:13:0",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 111,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 110,
                  "mutability": "mutable",
                  "name": "version",
                  "nameLocation": "6282:7:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 154,
                  "src": "6275:14:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 109,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "6275:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6274:16:0"
            },
            "src": "6252:431:0",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 161,
              "nodeType": "Block",
              "src": "6921:48:0",
              "statements": [
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 157,
                      "name": "_checkInitializing",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 175,
                      "src": "6931:18:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$__$",
                        "typeString": "function () view"
                      }
                    },
                    "id": 158,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6931:20:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 159,
                  "nodeType": "ExpressionStatement",
                  "src": "6931:20:0"
                },
                {
                  "id": 160,
                  "nodeType": "PlaceholderStatement",
                  "src": "6961:1:0"
                }
              ]
            },
            "documentation": {
              "id": 155,
              "nodeType": "StructuredDocumentation",
              "src": "6689:199:0",
              "text": " @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\n {initializer} and {reinitializer} modifiers, directly or indirectly."
            },
            "id": 162,
            "name": "onlyInitializing",
            "nameLocation": "6902:16:0",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 156,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6918:2:0"
            },
            "src": "6893:76:0",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 174,
              "nodeType": "Block",
              "src": "7136:89:0",
              "statements": [
                {
                  "condition": {
                    "id": 168,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "7150:18:0",
                    "subExpression": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 166,
                        "name": "_isInitializing",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 243,
                        "src": "7151:15:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$__$returns$_t_bool_$",
                          "typeString": "function () view returns (bool)"
                        }
                      },
                      "id": 167,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "7151:17:0",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 173,
                  "nodeType": "IfStatement",
                  "src": "7146:73:0",
                  "trueBody": {
                    "id": 172,
                    "nodeType": "Block",
                    "src": "7170:49:0",
                    "statements": [
                      {
                        "errorCall": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 169,
                            "name": "NotInitializing",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 19,
                            "src": "7191:15:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_error_pure$__$returns$__$",
                              "typeString": "function () pure"
                            }
                          },
                          "id": 170,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7191:17:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 171,
                        "nodeType": "RevertStatement",
                        "src": "7184:24:0"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": {
              "id": 163,
              "nodeType": "StructuredDocumentation",
              "src": "6975:104:0",
              "text": " @dev Reverts if the contract is not in an initializing state. See {onlyInitializing}."
            },
            "id": 175,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_checkInitializing",
            "nameLocation": "7093:18:0",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 164,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7111:2:0"
            },
            "returnParameters": {
              "id": 165,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7136:0:0"
            },
            "scope": 253,
            "src": "7084:141:0",
            "stateMutability": "view",
            "virtual": true,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 220,
              "nodeType": "Block",
              "src": "7760:373:0",
              "statements": [
                {
                  "assignments": [
                    181
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 181,
                      "mutability": "mutable",
                      "name": "$",
                      "nameLocation": "7855:1:0",
                      "nodeType": "VariableDeclaration",
                      "scope": 220,
                      "src": "7826:30:0",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_InitializableStorage_$10_storage_ptr",
                        "typeString": "struct Initializable.InitializableStorage"
                      },
                      "typeName": {
                        "id": 180,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 179,
                          "name": "InitializableStorage",
                          "nameLocations": [
                            "7826:20:0"
                          ],
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 10,
                          "src": "7826:20:0"
                        },
                        "referencedDeclaration": 10,
                        "src": "7826:20:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_InitializableStorage_$10_storage_ptr",
                          "typeString": "struct Initializable.InitializableStorage"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 184,
                  "initialValue": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 182,
                      "name": "_getInitializableStorage",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 252,
                      "src": "7859:24:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$__$returns$_t_struct$_InitializableStorage_$10_storage_ptr_$",
                        "typeString": "function () pure returns (struct Initializable.InitializableStorage storage pointer)"
                      }
                    },
                    "id": 183,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7859:26:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_InitializableStorage_$10_storage_ptr",
                      "typeString": "struct Initializable.InitializableStorage storage pointer"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7826:59:0"
                },
                {
                  "condition": {
                    "expression": {
                      "id": 185,
                      "name": "$",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 181,
                      "src": "7900:1:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_InitializableStorage_$10_storage_ptr",
                        "typeString": "struct Initializable.InitializableStorage storage pointer"
                      }
                    },
                    "id": 186,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberLocation": "7902:13:0",
                    "memberName": "_initializing",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 9,
                    "src": "7900:15:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 191,
                  "nodeType": "IfStatement",
                  "src": "7896:76:0",
                  "trueBody": {
                    "id": 190,
                    "nodeType": "Block",
                    "src": "7917:55:0",
                    "statements": [
                      {
                        "errorCall": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 187,
                            "name": "InvalidInitialization",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 16,
                            "src": "7938:21:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_error_pure$__$returns$__$",
                              "typeString": "function () pure"
                            }
                          },
                          "id": 188,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7938:23:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 189,
                        "nodeType": "RevertStatement",
                        "src": "7931:30:0"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    },
                    "id": 199,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 192,
                        "name": "$",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 181,
                        "src": "7985:1:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_InitializableStorage_$10_storage_ptr",
                          "typeString": "struct Initializable.InitializableStorage storage pointer"
                        }
                      },
                      "id": 193,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "7987:12:0",
                      "memberName": "_initialized",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6,
                      "src": "7985:14:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "expression": {
                        "arguments": [
                          {
                            "id": 196,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "8008:6:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint64_$",
                              "typeString": "type(uint64)"
                            },
                            "typeName": {
                              "id": 195,
                              "name": "uint64",
                              "nodeType": "ElementaryTypeName",
                              "src": "8008:6:0",
                              "typeDescriptions": {}
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_type$_t_uint64_$",
                              "typeString": "type(uint64)"
                            }
                          ],
                          "id": 194,
                          "name": "type",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4294967269,
                          "src": "8003:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                            "typeString": "function () pure"
                          }
                        },
                        "id": 197,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "8003:12:0",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_meta_type_t_uint64",
                          "typeString": "type(uint64)"
                        }
                      },
                      "id": 198,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberLocation": "8016:3:0",
                      "memberName": "max",
                      "nodeType": "MemberAccess",
                      "src": "8003:16:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "7985:34:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 219,
                  "nodeType": "IfStatement",
                  "src": "7981:146:0",
                  "trueBody": {
                    "id": 218,
                    "nodeType": "Block",
                    "src": "8021:106:0",
                    "statements": [
                      {
                        "expression": {
                          "id": 208,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "id": 200,
                              "name": "$",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 181,
                              "src": "8035:1:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_InitializableStorage_$10_storage_ptr",
                                "typeString": "struct Initializable.InitializableStorage storage pointer"
                              }
                            },
                            "id": 202,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberLocation": "8037:12:0",
                            "memberName": "_initialized",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 6,
                            "src": "8035:14:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "expression": {
                              "arguments": [
                                {
                                  "id": 205,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "8057:6:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint64_$",
                                    "typeString": "type(uint64)"
                                  },
                                  "typeName": {
                                    "id": 204,
                                    "name": "uint64",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "8057:6:0",
                                    "typeDescriptions": {}
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_type$_t_uint64_$",
                                    "typeString": "type(uint64)"
                                  }
                                ],
                                "id": 203,
                                "name": "type",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4294967269,
                                "src": "8052:4:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                  "typeString": "function () pure"
                                }
                              },
                              "id": 206,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "8052:12:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_meta_type_t_uint64",
                                "typeString": "type(uint64)"
                              }
                            },
                            "id": 207,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberLocation": "8065:3:0",
                            "memberName": "max",
                            "nodeType": "MemberAccess",
                            "src": "8052:16:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          },
                          "src": "8035:33:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "id": 209,
                        "nodeType": "ExpressionStatement",
                        "src": "8035:33:0"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 213,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "8104:6:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_uint64_$",
                                      "typeString": "type(uint64)"
                                    },
                                    "typeName": {
                                      "id": 212,
                                      "name": "uint64",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "8104:6:0",
                                      "typeDescriptions": {}
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_type$_t_uint64_$",
                                      "typeString": "type(uint64)"
                                    }
                                  ],
                                  "id": 211,
                                  "name": "type",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4294967269,
                                  "src": "8099:4:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                    "typeString": "function () pure"
                                  }
                                },
                                "id": 214,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "8099:12:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_meta_type_t_uint64",
                                  "typeString": "type(uint64)"
                                }
                              },
                              "id": 215,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberLocation": "8112:3:0",
                              "memberName": "max",
                              "nodeType": "MemberAccess",
                              "src": "8099:16:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              }
                            ],
                            "id": 210,
                            "name": "Initialized",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 24,
                            "src": "8087:11:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_uint64_$returns$__$",
                              "typeString": "function (uint64)"
                            }
                          },
                          "id": 216,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8087:29:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 217,
                        "nodeType": "EmitStatement",
                        "src": "8082:34:0"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": {
              "id": 176,
              "nodeType": "StructuredDocumentation",
              "src": "7231:475:0",
              "text": " @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\n Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\n to any version. It is recommended to use this to lock implementation contracts that are designed to be called\n through proxies.\n Emits an {Initialized} event the first time it is successfully executed."
            },
            "id": 221,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_disableInitializers",
            "nameLocation": "7720:20:0",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 177,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7740:2:0"
            },
            "returnParameters": {
              "id": 178,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7760:0:0"
            },
            "scope": 253,
            "src": "7711:422:0",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 231,
              "nodeType": "Block",
              "src": "8308:63:0",
              "statements": [
                {
                  "expression": {
                    "expression": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 227,
                        "name": "_getInitializableStorage",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 252,
                        "src": "8325:24:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$__$returns$_t_struct$_InitializableStorage_$10_storage_ptr_$",
                          "typeString": "function () pure returns (struct Initializable.InitializableStorage storage pointer)"
                        }
                      },
                      "id": 228,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "8325:26:0",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_InitializableStorage_$10_storage_ptr",
                        "typeString": "struct Initializable.InitializableStorage storage pointer"
                      }
                    },
                    "id": 229,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberLocation": "8352:12:0",
                    "memberName": "_initialized",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 6,
                    "src": "8325:39:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "functionReturnParameters": 226,
                  "id": 230,
                  "nodeType": "Return",
                  "src": "8318:46:0"
                }
              ]
            },
            "documentation": {
              "id": 222,
              "nodeType": "StructuredDocumentation",
              "src": "8139:99:0",
              "text": " @dev Returns the highest version that has been initialized. See {reinitializer}."
            },
            "id": 232,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_getInitializedVersion",
            "nameLocation": "8252:22:0",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 223,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8274:2:0"
            },
            "returnParameters": {
              "id": 226,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 225,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 232,
                  "src": "8300:6:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 224,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "8300:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8299:8:0"
            },
            "scope": 253,
            "src": "8243:128:0",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 242,
              "nodeType": "Block",
              "src": "8543:64:0",
              "statements": [
                {
                  "expression": {
                    "expression": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 238,
                        "name": "_getInitializableStorage",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 252,
                        "src": "8560:24:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$__$returns$_t_struct$_InitializableStorage_$10_storage_ptr_$",
                          "typeString": "function () pure returns (struct Initializable.InitializableStorage storage pointer)"
                        }
                      },
                      "id": 239,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "8560:26:0",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_InitializableStorage_$10_storage_ptr",
                        "typeString": "struct Initializable.InitializableStorage storage pointer"
                      }
                    },
                    "id": 240,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberLocation": "8587:13:0",
                    "memberName": "_initializing",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 9,
                    "src": "8560:40:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 237,
                  "id": 241,
                  "nodeType": "Return",
                  "src": "8553:47:0"
                }
              ]
            },
            "documentation": {
              "id": 233,
              "nodeType": "StructuredDocumentation",
              "src": "8377:105:0",
              "text": " @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}."
            },
            "id": 243,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_isInitializing",
            "nameLocation": "8496:15:0",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 234,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8511:2:0"
            },
            "returnParameters": {
              "id": 237,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 236,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 243,
                  "src": "8537:4:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 235,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "8537:4:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8536:6:0"
            },
            "scope": 253,
            "src": "8487:120:0",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 251,
              "nodeType": "Block",
              "src": "8827:80:0",
              "statements": [
                {
                  "AST": {
                    "nativeSrc": "8846:55:0",
                    "nodeType": "YulBlock",
                    "src": "8846:55:0",
                    "statements": [
                      {
                        "nativeSrc": "8860:31:0",
                        "nodeType": "YulAssignment",
                        "src": "8860:31:0",
                        "value": {
                          "name": "INITIALIZABLE_STORAGE",
                          "nativeSrc": "8870:21:0",
                          "nodeType": "YulIdentifier",
                          "src": "8870:21:0"
                        },
                        "variableNames": [
                          {
                            "name": "$.slot",
                            "nativeSrc": "8860:6:0",
                            "nodeType": "YulIdentifier",
                            "src": "8860:6:0"
                          }
                        ]
                      }
                    ]
                  },
                  "evmVersion": "paris",
                  "externalReferences": [
                    {
                      "declaration": 248,
                      "isOffset": false,
                      "isSlot": true,
                      "src": "8860:6:0",
                      "suffix": "slot",
                      "valueSize": 1
                    },
                    {
                      "declaration": 13,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "8870:21:0",
                      "valueSize": 1
                    }
                  ],
                  "id": 250,
                  "nodeType": "InlineAssembly",
                  "src": "8837:64:0"
                }
              ]
            },
            "documentation": {
              "id": 244,
              "nodeType": "StructuredDocumentation",
              "src": "8613:67:0",
              "text": " @dev Returns a pointer to the storage namespace."
            },
            "id": 252,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_getInitializableStorage",
            "nameLocation": "8746:24:0",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 245,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8770:2:0"
            },
            "returnParameters": {
              "id": 249,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 248,
                  "mutability": "mutable",
                  "name": "$",
                  "nameLocation": "8824:1:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 252,
                  "src": "8795:30:0",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_InitializableStorage_$10_storage_ptr",
                    "typeString": "struct Initializable.InitializableStorage"
                  },
                  "typeName": {
                    "id": 247,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 246,
                      "name": "InitializableStorage",
                      "nameLocations": [
                        "8795:20:0"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 10,
                      "src": "8795:20:0"
                    },
                    "referencedDeclaration": 10,
                    "src": "8795:20:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_InitializableStorage_$10_storage_ptr",
                      "typeString": "struct Initializable.InitializableStorage"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8794:32:0"
            },
            "scope": 253,
            "src": "8737:170:0",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "private"
          }
        ],
        "scope": 254,
        "src": "2349:6560:0",
        "usedErrors": [
          16,
          19
        ],
        "usedEvents": [
          24
        ]
      }
    ],
    "src": "113:8797:0"
  },
  "compiler": {
    "name": "solc",
    "version": "0.8.25+commit.b61c2a91.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.4.16",
  "updatedAt": "2024-12-05T09:36:04.131Z",
  "devdoc": {
    "custom:oz-upgrades-unsafe-allow": "constructor constructor() {     _disableInitializers(); } ``` ====",
    "details": "This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer function so it can only be called once. The {initializer} modifier provided by this contract will have this effect. The initialization functions use a version number. Once a version number is used, it is consumed and cannot be reused. This mechanism prevents re-execution of each \"step\" but allows the creation of new initialization steps in case an upgrade adds a module that needs to be initialized. For example: [.hljs-theme-light.nopadding] ```solidity contract MyToken is ERC20Upgradeable {     function initialize() initializer public {         __ERC20_init(\"MyToken\", \"MTK\");     } } contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {     function initializeV2() reinitializer(2) public {         __ERC20Permit_init(\"MyToken\");     } } ``` TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}. CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure that all initializers are idempotent. This is not verified automatically as constructors are by Solidity. [CAUTION] ==== Avoid leaving a contract uninitialized. An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke the {_disableInitializers} function in the constructor to automatically lock it when it is deployed: [.hljs-theme-light.nopadding] ```",
    "errors": {
      "InvalidInitialization()": [
        {
          "details": "The contract is already initialized."
        }
      ],
      "NotInitializing()": [
        {
          "details": "The contract is not initializing."
        }
      ]
    },
    "events": {
      "Initialized(uint64)": {
        "details": "Triggered when the contract has been initialized or reinitialized."
      }
    },
    "kind": "dev",
    "methods": {},
    "version": 1
  },
  "userdoc": {
    "kind": "user",
    "methods": {},
    "version": 1
  }
}