{
  "contractName": "Upgradeable",
  "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"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "baseAddr",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "baseCodehash",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "string",
          "name": "versionTag",
          "type": "string"
        }
      ],
      "name": "Upgraded",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "proxiableUUID",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "base",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "codehash",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "_codehash",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "isUpgradable",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        }
      ],
      "name": "isUpgradableFrom",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "version",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.8.30+commit.73712a01\"},\"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\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"baseAddr\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"baseCodehash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"versionTag\",\"type\":\"string\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"base\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"codehash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"_codehash\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isUpgradable\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"}],\"name\":\"isUpgradableFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"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.\"},\"Upgraded(address,address,bytes32,string)\":{\"params\":{\"baseAddr\":\"The address of the new implementation contract.\",\"baseCodehash\":\"The EVM-codehash of the new implementation contract.\",\"from\":\"The address who ordered the upgrading. Namely, the WRB operator in \\\"trustable\\\" implementations.\",\"versionTag\":\"Ascii-encoded version literal with which the implementation deployer decided to tag it.\"}}},\"kind\":\"dev\",\"methods\":{\"base()\":{\"details\":\"Retrieves base contract. Differs from address(this) when called via delegate-proxy pattern.\"},\"codehash()\":{\"details\":\"Retrieves the immutable codehash of this contract, even if invoked as delegatecall.\"},\"initialize(bytes)\":{\"details\":\"Must fail when trying to upgrade to same logic contract more than once.\"},\"isUpgradable()\":{\"details\":\"Determines whether the logic of this contract is potentially upgradable.\"},\"isUpgradableFrom(address)\":{\"details\":\"Tells whether provided address could eventually upgrade the contract.\"},\"proxiableUUID()\":{\"details\":\"Complying with EIP-1822: Universal Upgradeable Proxy Standard (UUPS)See https://eips.ethereum.org/EIPS/eip-1822.\"},\"version()\":{\"details\":\"Retrieves human-redable named version of current implementation.\"}},\"version\":1},\"userdoc\":{\"events\":{\"Upgraded(address,address,bytes32,string)\":{\"notice\":\"Emitted every time the contract gets upgraded.\"}},\"kind\":\"user\",\"methods\":{\"initialize(bytes)\":{\"notice\":\"Re-initialize contract's storage context upon a new upgrade from a proxy.    \"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"project:/contracts/patterns/Upgradeable.sol\":\"Upgradeable\"},\"evmVersion\":\"prague\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"keccak256\":\"0xdb4d24ee2c087c391d587cd17adfe5b3f9d93b3110b1388c2ab6c7c0ad1dcd05\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ab7b6d5b9e2b88176312967fe0f0e78f3d9a1422fa5e4b64e2440c35869b5d08\",\"dweb:/ipfs/QmXKYWWyzcLg1B2k7Sb1qkEXgLCYfXecR9wYW5obRzWP1Q\"]},\"@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0x2d9dc2fe26180f74c11c13663647d38e259e45f95eb88f57b61d2160b0109d3e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://81233d1f98060113d9922180bb0f14f8335856fe9f339134b09335e9f678c377\",\"dweb:/ipfs/QmWh6R35SarhAn4z2wH8SU456jJSYL2FgucfTFgbHJJN4E\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x8891738ffe910f0cf2da09566928589bf5d63f4524dd734fd9cedbac3274dd5c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://971f954442df5c2ef5b5ebf1eb245d7105d9fbacc7386ee5c796df1d45b21617\",\"dweb:/ipfs/QmadRjHbkicwqwwh61raUEapaVEtaLMcYbQZWs9gUkgj3u\"]},\"project:/contracts/patterns/Initializable.sol\":{\"keccak256\":\"0xaac470e87f361cf15d68d1618d6eb7d4913885d33ccc39c797841a9591d44296\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ef3760b2039feda8715d4bd9f8de8e3885f25573d12ba92f52d626ba880a08bf\",\"dweb:/ipfs/QmP2mfHPBKkjTAKft95sPDb4PBsjfmAwc47Kdcv3xYSf3g\"]},\"project:/contracts/patterns/Proxiable.sol\":{\"keccak256\":\"0x86032205378fed9ed2bf155eed8ce4bdbb13b7f5960850c6d50954a38b61a3d8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f89978eda4244a13f42a6092a94ac829bb3e38c92d77d4978b9f32894b187a63\",\"dweb:/ipfs/Qmbc1XaFCvLm3Sxvh7tP29Ug32jBGy3avsCqBGAptxs765\"]},\"project:/contracts/patterns/Upgradeable.sol\":{\"keccak256\":\"0x49d1a83abc7a9b39d224677dde65ead4b7f1104332a94c9e619854b2a6b3a89e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e6a798a953af921a5b4e24e3f78bebae97819a85c90deb12ec505952faa42814\",\"dweb:/ipfs/QmVJhv4x3MXf4aDbMC5Q259K8kZNvxSXzmy8anoow7nS7k\"]}},\"version\":1}",
  "bytecode": "0x",
  "deployedBytecode": "0x",
  "immutableReferences": {},
  "generatedSources": [],
  "deployedGeneratedSources": [],
  "sourceMap": "",
  "deployedSourceMap": "",
  "source": "// SPDX-License-Identifier: MIT\r\n\r\n/* solhint-disable var-name-mixedcase */\r\n\r\npragma solidity >=0.6.0 <0.9.0;\r\n\r\nimport \"@openzeppelin/contracts/utils/introspection/ERC165.sol\";\r\n\r\nimport \"./Initializable.sol\";\r\nimport \"./Proxiable.sol\";\r\n\r\nabstract contract Upgradeable is Initializable, Proxiable {\r\n\r\n    address internal immutable _BASE;\r\n    bytes32 internal immutable _CODEHASH;\r\n    bool internal immutable _UPGRADABLE;\r\n\r\n    modifier onlyDelegateCalls virtual {\r\n        require(\r\n            address(this) != _BASE,\r\n            \"Upgradeable: not a delegate call\"\r\n        );\r\n        _;\r\n    }\r\n\r\n    /// Emitted every time the contract gets upgraded.\r\n    /// @param from The address who ordered the upgrading. Namely, the WRB operator in \"trustable\" implementations.\r\n    /// @param baseAddr The address of the new implementation contract.\r\n    /// @param baseCodehash The EVM-codehash of the new implementation contract.\r\n    /// @param versionTag Ascii-encoded version literal with which the implementation deployer decided to tag it.\r\n    event Upgraded(\r\n        address indexed from,\r\n        address indexed baseAddr,\r\n        bytes32 indexed baseCodehash,\r\n        string  versionTag\r\n    );\r\n\r\n    constructor (bool _isUpgradable) {\r\n        address _base = address(this);\r\n        _BASE = _base;\r\n        _UPGRADABLE = _isUpgradable;\r\n    }\r\n\r\n    /// @dev Retrieves base contract. Differs from address(this) when called via delegate-proxy pattern.\r\n    function base() virtual public view returns (address) {\r\n        return _BASE;\r\n    }\r\n\r\n    /// @dev Retrieves the immutable codehash of this contract, even if invoked as delegatecall.\r\n    function codehash() public view returns (bytes32 _codehash) {\r\n        address _base = _BASE;\r\n        assembly {\r\n            _codehash := extcodehash(_base)\r\n        }\r\n    }\r\n\r\n    /// @dev Determines whether the logic of this contract is potentially upgradable.\r\n    function isUpgradable() public view returns (bool) {\r\n        return _UPGRADABLE;\r\n    }\r\n\r\n    /// @dev Tells whether provided address could eventually upgrade the contract.\r\n    function isUpgradableFrom(address from) virtual external view returns (bool);\r\n\r\n    /// @notice Re-initialize contract's storage context upon a new upgrade from a proxy.    \r\n    /// @dev Must fail when trying to upgrade to same logic contract more than once.\r\n    function initialize(bytes memory) virtual external;\r\n    function __initializeUpgradableData(bytes memory _initData) virtual internal;\r\n\r\n    /// @dev Retrieves human-redable named version of current implementation.\r\n    function version() virtual public view returns (string memory); \r\n}",
  "sourcePath": "C:\\Users\\guill\\github\\guidiaz\\witnet-solidity-bridge\\contracts\\patterns\\Upgradeable.sol",
  "ast": {
    "absolutePath": "project:/contracts/patterns/Upgradeable.sol",
    "exportedSymbols": {
      "ERC165": [
        616
      ],
      "IERC165": [
        628
      ],
      "Initializable": [
        267
      ],
      "Proxiable": [
        45810
      ],
      "Upgradeable": [
        45930
      ]
    },
    "id": 45931,
    "license": "MIT",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 45815,
        "literals": [
          "solidity",
          ">=",
          "0.6",
          ".0",
          "<",
          "0.9",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "79:31:135"
      },
      {
        "absolutePath": "@openzeppelin/contracts/utils/introspection/ERC165.sol",
        "file": "@openzeppelin/contracts/utils/introspection/ERC165.sol",
        "id": 45816,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 45931,
        "sourceUnit": 617,
        "src": "114:64:135",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "project:/contracts/patterns/Initializable.sol",
        "file": "./Initializable.sol",
        "id": 45817,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 45931,
        "sourceUnit": 45622,
        "src": "182:29:135",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "project:/contracts/patterns/Proxiable.sol",
        "file": "./Proxiable.sol",
        "id": 45818,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 45931,
        "sourceUnit": 45811,
        "src": "213:25:135",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": true,
        "baseContracts": [
          {
            "baseName": {
              "id": 45819,
              "name": "Initializable",
              "nameLocations": [
                "275:13:135"
              ],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 267,
              "src": "275:13:135"
            },
            "id": 45820,
            "nodeType": "InheritanceSpecifier",
            "src": "275:13:135"
          },
          {
            "baseName": {
              "id": 45821,
              "name": "Proxiable",
              "nameLocations": [
                "290:9:135"
              ],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 45810,
              "src": "290:9:135"
            },
            "id": 45822,
            "nodeType": "InheritanceSpecifier",
            "src": "290:9:135"
          }
        ],
        "canonicalName": "Upgradeable",
        "contractDependencies": [],
        "contractKind": "contract",
        "fullyImplemented": false,
        "id": 45930,
        "linearizedBaseContracts": [
          45930,
          45810,
          267
        ],
        "name": "Upgradeable",
        "nameLocation": "260:11:135",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": false,
            "id": 45824,
            "mutability": "immutable",
            "name": "_BASE",
            "nameLocation": "336:5:135",
            "nodeType": "VariableDeclaration",
            "scope": 45930,
            "src": "309:32:135",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 45823,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "309:7:135",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 45826,
            "mutability": "immutable",
            "name": "_CODEHASH",
            "nameLocation": "375:9:135",
            "nodeType": "VariableDeclaration",
            "scope": 45930,
            "src": "348:36:135",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 45825,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "348:7:135",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 45828,
            "mutability": "immutable",
            "name": "_UPGRADABLE",
            "nameLocation": "415:11:135",
            "nodeType": "VariableDeclaration",
            "scope": 45930,
            "src": "391:35:135",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bool",
              "typeString": "bool"
            },
            "typeName": {
              "id": 45827,
              "name": "bool",
              "nodeType": "ElementaryTypeName",
              "src": "391:4:135",
              "typeDescriptions": {
                "typeIdentifier": "t_bool",
                "typeString": "bool"
              }
            },
            "visibility": "internal"
          },
          {
            "body": {
              "id": 45841,
              "nodeType": "Block",
              "src": "470:135:135",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 45836,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "arguments": [
                            {
                              "id": 45833,
                              "name": "this",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4294967268,
                              "src": "511:4:135",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_Upgradeable_$45930",
                                "typeString": "contract Upgradeable"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_Upgradeable_$45930",
                                "typeString": "contract Upgradeable"
                              }
                            ],
                            "id": 45832,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "503:7:135",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 45831,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "503:7:135",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 45834,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "503:13:135",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "id": 45835,
                          "name": "_BASE",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 45824,
                          "src": "520:5:135",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "503:22:135",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "5570677261646561626c653a206e6f7420612064656c65676174652063616c6c",
                        "id": 45837,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "540:34:135",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_90e095d6d6ca6b07be08fb15eec2b1209d1399dee84122827df7649f8a4c27cb",
                          "typeString": "literal_string \"Upgradeable: not a delegate call\""
                        },
                        "value": "Upgradeable: not a delegate call"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_90e095d6d6ca6b07be08fb15eec2b1209d1399dee84122827df7649f8a4c27cb",
                          "typeString": "literal_string \"Upgradeable: not a delegate call\""
                        }
                      ],
                      "id": 45830,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "481:7:135",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 45838,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "481:104:135",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 45839,
                  "nodeType": "ExpressionStatement",
                  "src": "481:104:135"
                },
                {
                  "id": 45840,
                  "nodeType": "PlaceholderStatement",
                  "src": "596:1:135"
                }
              ]
            },
            "id": 45842,
            "name": "onlyDelegateCalls",
            "nameLocation": "444:17:135",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 45829,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "462:0:135"
            },
            "src": "435:170:135",
            "virtual": true,
            "visibility": "internal"
          },
          {
            "anonymous": false,
            "documentation": {
              "id": 45843,
              "nodeType": "StructuredDocumentation",
              "src": "613:437:135",
              "text": "Emitted every time the contract gets upgraded.\n @param from The address who ordered the upgrading. Namely, the WRB operator in \"trustable\" implementations.\n @param baseAddr The address of the new implementation contract.\n @param baseCodehash The EVM-codehash of the new implementation contract.\n @param versionTag Ascii-encoded version literal with which the implementation deployer decided to tag it."
            },
            "eventSelector": "e73e754121f0bad1327816970101955bfffdf53d270ac509d777c25be070d7f6",
            "id": 45853,
            "name": "Upgraded",
            "nameLocation": "1062:8:135",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 45852,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 45845,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "from",
                  "nameLocation": "1097:4:135",
                  "nodeType": "VariableDeclaration",
                  "scope": 45853,
                  "src": "1081:20:135",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 45844,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1081:7:135",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 45847,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "baseAddr",
                  "nameLocation": "1128:8:135",
                  "nodeType": "VariableDeclaration",
                  "scope": 45853,
                  "src": "1112:24:135",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 45846,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1112:7:135",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 45849,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "baseCodehash",
                  "nameLocation": "1163:12:135",
                  "nodeType": "VariableDeclaration",
                  "scope": 45853,
                  "src": "1147:28:135",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 45848,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1147:7:135",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 45851,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "versionTag",
                  "nameLocation": "1194:10:135",
                  "nodeType": "VariableDeclaration",
                  "scope": 45853,
                  "src": "1186:18:135",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 45850,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1186:6:135",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1070:141:135"
            },
            "src": "1056:156:135"
          },
          {
            "body": {
              "id": 45873,
              "nodeType": "Block",
              "src": "1253:110:135",
              "statements": [
                {
                  "assignments": [
                    45859
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 45859,
                      "mutability": "mutable",
                      "name": "_base",
                      "nameLocation": "1272:5:135",
                      "nodeType": "VariableDeclaration",
                      "scope": 45873,
                      "src": "1264:13:135",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 45858,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "1264:7:135",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 45864,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 45862,
                        "name": "this",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4294967268,
                        "src": "1288:4:135",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Upgradeable_$45930",
                          "typeString": "contract Upgradeable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_Upgradeable_$45930",
                          "typeString": "contract Upgradeable"
                        }
                      ],
                      "id": 45861,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "1280:7:135",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": {
                        "id": 45860,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "1280:7:135",
                        "typeDescriptions": {}
                      }
                    },
                    "id": 45863,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1280:13:135",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1264:29:135"
                },
                {
                  "expression": {
                    "id": 45867,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 45865,
                      "name": "_BASE",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 45824,
                      "src": "1304:5:135",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 45866,
                      "name": "_base",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 45859,
                      "src": "1312:5:135",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "1304:13:135",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 45868,
                  "nodeType": "ExpressionStatement",
                  "src": "1304:13:135"
                },
                {
                  "expression": {
                    "id": 45871,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 45869,
                      "name": "_UPGRADABLE",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 45828,
                      "src": "1328:11:135",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 45870,
                      "name": "_isUpgradable",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 45855,
                      "src": "1342:13:135",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "1328:27:135",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 45872,
                  "nodeType": "ExpressionStatement",
                  "src": "1328:27:135"
                }
              ]
            },
            "id": 45874,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [],
            "name": "",
            "nameLocation": "-1:-1:-1",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 45856,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 45855,
                  "mutability": "mutable",
                  "name": "_isUpgradable",
                  "nameLocation": "1238:13:135",
                  "nodeType": "VariableDeclaration",
                  "scope": 45874,
                  "src": "1233:18:135",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 45854,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "1233:4:135",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1232:20:135"
            },
            "returnParameters": {
              "id": 45857,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1253:0:135"
            },
            "scope": 45930,
            "src": "1220:143:135",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 45882,
              "nodeType": "Block",
              "src": "1531:31:135",
              "statements": [
                {
                  "expression": {
                    "id": 45880,
                    "name": "_BASE",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 45824,
                    "src": "1549:5:135",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 45879,
                  "id": 45881,
                  "nodeType": "Return",
                  "src": "1542:12:135"
                }
              ]
            },
            "documentation": {
              "id": 45875,
              "nodeType": "StructuredDocumentation",
              "src": "1371:100:135",
              "text": "@dev Retrieves base contract. Differs from address(this) when called via delegate-proxy pattern."
            },
            "functionSelector": "5001f3b5",
            "id": 45883,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "base",
            "nameLocation": "1486:4:135",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 45876,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1490:2:135"
            },
            "returnParameters": {
              "id": 45879,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 45878,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 45883,
                  "src": "1522:7:135",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 45877,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1522:7:135",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1521:9:135"
            },
            "scope": 45930,
            "src": "1477:85:135",
            "stateMutability": "view",
            "virtual": true,
            "visibility": "public"
          },
          {
            "body": {
              "id": 45894,
              "nodeType": "Block",
              "src": "1728:116:135",
              "statements": [
                {
                  "assignments": [
                    45890
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 45890,
                      "mutability": "mutable",
                      "name": "_base",
                      "nameLocation": "1747:5:135",
                      "nodeType": "VariableDeclaration",
                      "scope": 45894,
                      "src": "1739:13:135",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 45889,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "1739:7:135",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 45892,
                  "initialValue": {
                    "id": 45891,
                    "name": "_BASE",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 45824,
                    "src": "1755:5:135",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1739:21:135"
                },
                {
                  "AST": {
                    "nativeSrc": "1780:57:135",
                    "nodeType": "YulBlock",
                    "src": "1780:57:135",
                    "statements": [
                      {
                        "nativeSrc": "1795:31:135",
                        "nodeType": "YulAssignment",
                        "src": "1795:31:135",
                        "value": {
                          "arguments": [
                            {
                              "name": "_base",
                              "nativeSrc": "1820:5:135",
                              "nodeType": "YulIdentifier",
                              "src": "1820:5:135"
                            }
                          ],
                          "functionName": {
                            "name": "extcodehash",
                            "nativeSrc": "1808:11:135",
                            "nodeType": "YulIdentifier",
                            "src": "1808:11:135"
                          },
                          "nativeSrc": "1808:18:135",
                          "nodeType": "YulFunctionCall",
                          "src": "1808:18:135"
                        },
                        "variableNames": [
                          {
                            "name": "_codehash",
                            "nativeSrc": "1795:9:135",
                            "nodeType": "YulIdentifier",
                            "src": "1795:9:135"
                          }
                        ]
                      }
                    ]
                  },
                  "evmVersion": "prague",
                  "externalReferences": [
                    {
                      "declaration": 45890,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "1820:5:135",
                      "valueSize": 1
                    },
                    {
                      "declaration": 45887,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "1795:9:135",
                      "valueSize": 1
                    }
                  ],
                  "id": 45893,
                  "nodeType": "InlineAssembly",
                  "src": "1771:66:135"
                }
              ]
            },
            "documentation": {
              "id": 45884,
              "nodeType": "StructuredDocumentation",
              "src": "1570:92:135",
              "text": "@dev Retrieves the immutable codehash of this contract, even if invoked as delegatecall."
            },
            "functionSelector": "a9e954b9",
            "id": 45895,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "codehash",
            "nameLocation": "1677:8:135",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 45885,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1685:2:135"
            },
            "returnParameters": {
              "id": 45888,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 45887,
                  "mutability": "mutable",
                  "name": "_codehash",
                  "nameLocation": "1717:9:135",
                  "nodeType": "VariableDeclaration",
                  "scope": 45895,
                  "src": "1709:17:135",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 45886,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1709:7:135",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1708:19:135"
            },
            "scope": 45930,
            "src": "1668:176:135",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 45903,
              "nodeType": "Block",
              "src": "1990:37:135",
              "statements": [
                {
                  "expression": {
                    "id": 45901,
                    "name": "_UPGRADABLE",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 45828,
                    "src": "2008:11:135",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 45900,
                  "id": 45902,
                  "nodeType": "Return",
                  "src": "2001:18:135"
                }
              ]
            },
            "documentation": {
              "id": 45896,
              "nodeType": "StructuredDocumentation",
              "src": "1852:81:135",
              "text": "@dev Determines whether the logic of this contract is potentially upgradable."
            },
            "functionSelector": "5479d940",
            "id": 45904,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isUpgradable",
            "nameLocation": "1948:12:135",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 45897,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1960:2:135"
            },
            "returnParameters": {
              "id": 45900,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 45899,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 45904,
                  "src": "1984:4:135",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 45898,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "1984:4:135",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1983:6:135"
            },
            "scope": 45930,
            "src": "1939:88:135",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "documentation": {
              "id": 45905,
              "nodeType": "StructuredDocumentation",
              "src": "2035:78:135",
              "text": "@dev Tells whether provided address could eventually upgrade the contract."
            },
            "functionSelector": "6b58960a",
            "id": 45912,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "isUpgradableFrom",
            "nameLocation": "2128:16:135",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 45908,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 45907,
                  "mutability": "mutable",
                  "name": "from",
                  "nameLocation": "2153:4:135",
                  "nodeType": "VariableDeclaration",
                  "scope": 45912,
                  "src": "2145:12:135",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 45906,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2145:7:135",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2144:14:135"
            },
            "returnParameters": {
              "id": 45911,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 45910,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 45912,
                  "src": "2190:4:135",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 45909,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "2190:4:135",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2189:6:135"
            },
            "scope": 45930,
            "src": "2119:77:135",
            "stateMutability": "view",
            "virtual": true,
            "visibility": "external"
          },
          {
            "documentation": {
              "id": 45913,
              "nodeType": "StructuredDocumentation",
              "src": "2204:175:135",
              "text": "@notice Re-initialize contract's storage context upon a new upgrade from a proxy.    \n @dev Must fail when trying to upgrade to same logic contract more than once."
            },
            "functionSelector": "439fab91",
            "id": 45918,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "initialize",
            "nameLocation": "2394:10:135",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 45916,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 45915,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 45918,
                  "src": "2405:12:135",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 45914,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "2405:5:135",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2404:14:135"
            },
            "returnParameters": {
              "id": 45917,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2435:0:135"
            },
            "scope": 45930,
            "src": "2385:51:135",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "external"
          },
          {
            "id": 45923,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "__initializeUpgradableData",
            "nameLocation": "2451:26:135",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 45921,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 45920,
                  "mutability": "mutable",
                  "name": "_initData",
                  "nameLocation": "2491:9:135",
                  "nodeType": "VariableDeclaration",
                  "scope": 45923,
                  "src": "2478:22:135",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 45919,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "2478:5:135",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2477:24:135"
            },
            "returnParameters": {
              "id": 45922,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2518:0:135"
            },
            "scope": 45930,
            "src": "2442:77:135",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "internal"
          },
          {
            "documentation": {
              "id": 45924,
              "nodeType": "StructuredDocumentation",
              "src": "2527:73:135",
              "text": "@dev Retrieves human-redable named version of current implementation."
            },
            "functionSelector": "54fd4d50",
            "id": 45929,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "version",
            "nameLocation": "2615:7:135",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 45925,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2622:2:135"
            },
            "returnParameters": {
              "id": 45928,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 45927,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 45929,
                  "src": "2654:13:135",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 45926,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "2654:6:135",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2653:15:135"
            },
            "scope": 45930,
            "src": "2606:63:135",
            "stateMutability": "view",
            "virtual": true,
            "visibility": "public"
          }
        ],
        "scope": 45931,
        "src": "242:2431:135",
        "usedErrors": [
          16,
          19
        ],
        "usedEvents": [
          24,
          45853
        ]
      }
    ],
    "src": "79:2594:135"
  },
  "compiler": {
    "name": "solc",
    "version": "0.8.30+commit.73712a01.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.4.16",
  "updatedAt": "2025-10-15T14:34:46.053Z",
  "devdoc": {
    "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."
      },
      "Upgraded(address,address,bytes32,string)": {
        "params": {
          "baseAddr": "The address of the new implementation contract.",
          "baseCodehash": "The EVM-codehash of the new implementation contract.",
          "from": "The address who ordered the upgrading. Namely, the WRB operator in \"trustable\" implementations.",
          "versionTag": "Ascii-encoded version literal with which the implementation deployer decided to tag it."
        }
      }
    },
    "kind": "dev",
    "methods": {
      "base()": {
        "details": "Retrieves base contract. Differs from address(this) when called via delegate-proxy pattern."
      },
      "codehash()": {
        "details": "Retrieves the immutable codehash of this contract, even if invoked as delegatecall."
      },
      "initialize(bytes)": {
        "details": "Must fail when trying to upgrade to same logic contract more than once."
      },
      "isUpgradable()": {
        "details": "Determines whether the logic of this contract is potentially upgradable."
      },
      "isUpgradableFrom(address)": {
        "details": "Tells whether provided address could eventually upgrade the contract."
      },
      "proxiableUUID()": {
        "details": "Complying with EIP-1822: Universal Upgradeable Proxy Standard (UUPS)See https://eips.ethereum.org/EIPS/eip-1822."
      },
      "version()": {
        "details": "Retrieves human-redable named version of current implementation."
      }
    },
    "version": 1
  },
  "userdoc": {
    "events": {
      "Upgraded(address,address,bytes32,string)": {
        "notice": "Emitted every time the contract gets upgraded."
      }
    },
    "kind": "user",
    "methods": {
      "initialize(bytes)": {
        "notice": "Re-initialize contract's storage context upon a new upgrade from a proxy.    "
      }
    },
    "version": 1
  }
}