{
  "contractName": "Clonable",
  "abi": [
    {
      "inputs": [],
      "name": "InvalidInitialization",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "NotInitializing",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "by",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "master",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "clone",
          "type": "address"
        }
      ],
      "name": "Cloned",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint64",
          "name": "version",
          "type": "uint64"
        }
      ],
      "name": "Initialized",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "base",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "cloned",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "initialized",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "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\":true,\"internalType\":\"address\",\"name\":\"by\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"master\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"clone\",\"type\":\"address\"}],\"name\":\"Cloned\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"base\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"cloned\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"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.\"}},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"cloned()\":{\"notice\":\"Tells whether this contract is a clone of `self()`\"},\"initialized()\":{\"notice\":\"Tells whether this instance has been initialized.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"project:/contracts/patterns/Clonable.sol\":\"Clonable\"},\"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\"]},\"project:/contracts/patterns/Clonable.sol\":{\"keccak256\":\"0x9a2dbc814306f60263fe736b88aeabc44fc241d3bed132e8dd76a3684dd825f7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e665de5be06c9227c49f9466d24f798d4bed1a2db66d4d1368dcd9fc663c1b3a\",\"dweb:/ipfs/QmRjY2CHTGp1eyi9XPeTKr4WnPCzXbtk2285kdy2bJVCYA\"]},\"project:/contracts/patterns/Initializable.sol\":{\"keccak256\":\"0xaac470e87f361cf15d68d1618d6eb7d4913885d33ccc39c797841a9591d44296\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ef3760b2039feda8715d4bd9f8de8e3885f25573d12ba92f52d626ba880a08bf\",\"dweb:/ipfs/QmP2mfHPBKkjTAKft95sPDb4PBsjfmAwc47Kdcv3xYSf3g\"]}},\"version\":1}",
  "bytecode": "0x",
  "deployedBytecode": "0x",
  "immutableReferences": {},
  "generatedSources": [],
  "deployedGeneratedSources": [],
  "sourceMap": "",
  "deployedSourceMap": "",
  "source": "// SPDX-License-Identifier: MIT\r\n\r\npragma solidity >=0.8.20 <0.9.0;\r\n\r\nimport \"./Initializable.sol\";\r\n\r\nabstract contract Clonable\r\n    is\r\n        Initializable\r\n{\r\n    address immutable internal __SELF = address(this);\r\n\r\n    event Cloned(address indexed by, address indexed master, address indexed clone);\r\n\r\n    modifier onlyOnClones virtual {\r\n        require(cloned(), \"Clonable: only on clones\");\r\n        _;\r\n    }\r\n\r\n    modifier notOnClones virtual {\r\n        require(!cloned(), \"Clonable: not on clones\"); \r\n        _;\r\n    }\r\n\r\n    modifier wasInitialized {\r\n        require(initialized(), \"Clonable: not initialized\");\r\n        _;\r\n    }\r\n\r\n    function base() virtual public view returns (address) {\r\n        return __SELF;\r\n    }\r\n\r\n    /// @notice Tells whether this contract is a clone of `self()`\r\n    function cloned()\r\n        virtual public view\r\n        returns (bool)\r\n    {\r\n        return address(this) != __SELF;\r\n    }\r\n\r\n    /// @notice Tells whether this instance has been initialized.\r\n    function initialized() virtual public view returns (bool);\r\n\r\n    /// Deploys and returns the address of a minimal proxy clone that replicates contract\r\n    /// behaviour while using its own EVM storage.\r\n    /// @dev This function should always provide a new address, no matter how many times \r\n    /// @dev is actually called from the same `msg.sender`.\r\n    /// @dev See https://eips.ethereum.org/EIPS/eip-1167.\r\n    /// @dev See https://blog.openzeppelin.com/deep-dive-into-the-minimal-proxy-contract/.\r\n    function __clone()\r\n        internal\r\n        returns (address _instance)\r\n    {\r\n        bytes memory ptr = _cloneBytecodePtr();\r\n        assembly {\r\n            // CREATE new instance:\r\n            _instance := create(0, ptr, 0x37)\r\n        }        \r\n        require(_instance != address(0), \"Clonable: CREATE failed\");\r\n        emit Cloned(msg.sender, base(), _instance);\r\n    }\r\n\r\n    /// Deploys and returns the address of a minimal proxy clone that replicates contract \r\n    /// behaviour while using its own EVM storage.\r\n    /// @dev This function uses the CREATE2 opcode and a `_salt` to deterministically deploy\r\n    /// @dev the clone. Using the same `_salt` multiple times will revert, since\r\n    /// @dev no contract can be deployed more than once at the same address.\r\n    /// @dev See https://eips.ethereum.org/EIPS/eip-1167.\r\n    /// @dev See https://blog.openzeppelin.com/deep-dive-into-the-minimal-proxy-contract/.\r\n    function __cloneDeterministic(bytes32 _salt)\r\n        internal\r\n        notOnClones\r\n        returns (address _instance)\r\n    {\r\n        bytes memory ptr = _cloneBytecodePtr();\r\n        assembly {\r\n            // CREATE2 new instance:\r\n            _instance := create2(0, ptr, 0x37, _salt)\r\n        }\r\n        require(_instance != address(0), \"Clonable: CREATE2 failed\");\r\n        emit Cloned(msg.sender, base(), _instance);\r\n    }\r\n\r\n    /// @notice Returns minimal proxy's deploy bytecode.\r\n    function _cloneBytecode()\r\n        internal view\r\n        returns (bytes memory)\r\n    {\r\n        return abi.encodePacked(\r\n            hex\"3d602d80600a3d3981f3363d3d373d3d3d363d73\",\r\n            bytes20(base()),\r\n            hex\"5af43d82803e903d91602b57fd5bf3\"\r\n        );\r\n    }\r\n\r\n    /// @notice Returns mem pointer to minimal proxy's deploy bytecode.\r\n    function _cloneBytecodePtr()\r\n        private view\r\n        returns (bytes memory ptr)\r\n    {\r\n        address _base = base();\r\n        assembly {\r\n            // ptr to free mem:\r\n            ptr := mload(0x40)\r\n            // begin minimal proxy construction bytecode:\r\n            mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\r\n            // make minimal proxy delegate all calls to `target()`:\r\n            mstore(add(ptr, 0x14), shl(0x60, _base))\r\n            // end minimal proxy construction bytecode:\r\n            mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)\r\n        }\r\n    }\r\n}",
  "sourcePath": "C:\\Users\\guill\\github\\guidiaz\\witnet-solidity-bridge\\contracts\\patterns\\Clonable.sol",
  "ast": {
    "absolutePath": "project:/contracts/patterns/Clonable.sol",
    "exportedSymbols": {
      "Clonable": [
        45518
      ],
      "Initializable": [
        267
      ]
    },
    "id": 45519,
    "license": "MIT",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 45344,
        "literals": [
          "solidity",
          ">=",
          "0.8",
          ".20",
          "<",
          "0.9",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "35:32:127"
      },
      {
        "absolutePath": "project:/contracts/patterns/Initializable.sol",
        "file": "./Initializable.sol",
        "id": 45345,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 45519,
        "sourceUnit": 45622,
        "src": "71:29:127",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": true,
        "baseContracts": [
          {
            "baseName": {
              "id": 45346,
              "name": "Initializable",
              "nameLocations": [
                "148:13:127"
              ],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 267,
              "src": "148:13:127"
            },
            "id": 45347,
            "nodeType": "InheritanceSpecifier",
            "src": "148:13:127"
          }
        ],
        "canonicalName": "Clonable",
        "contractDependencies": [],
        "contractKind": "contract",
        "fullyImplemented": false,
        "id": 45518,
        "linearizedBaseContracts": [
          45518,
          267
        ],
        "name": "Clonable",
        "nameLocation": "122:8:127",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": false,
            "id": 45353,
            "mutability": "immutable",
            "name": "__SELF",
            "nameLocation": "197:6:127",
            "nodeType": "VariableDeclaration",
            "scope": 45518,
            "src": "170:49:127",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 45348,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "170:7:127",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "value": {
              "arguments": [
                {
                  "id": 45351,
                  "name": "this",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 4294967268,
                  "src": "214:4:127",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_Clonable_$45518",
                    "typeString": "contract Clonable"
                  }
                }
              ],
              "expression": {
                "argumentTypes": [
                  {
                    "typeIdentifier": "t_contract$_Clonable_$45518",
                    "typeString": "contract Clonable"
                  }
                ],
                "id": 45350,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "lValueRequested": false,
                "nodeType": "ElementaryTypeNameExpression",
                "src": "206:7:127",
                "typeDescriptions": {
                  "typeIdentifier": "t_type$_t_address_$",
                  "typeString": "type(address)"
                },
                "typeName": {
                  "id": 45349,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "206:7:127",
                  "typeDescriptions": {}
                }
              },
              "id": 45352,
              "isConstant": false,
              "isLValue": false,
              "isPure": false,
              "kind": "typeConversion",
              "lValueRequested": false,
              "nameLocations": [],
              "names": [],
              "nodeType": "FunctionCall",
              "src": "206:13:127",
              "tryCall": false,
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "visibility": "internal"
          },
          {
            "anonymous": false,
            "eventSelector": "f376596be5039d6b2fb36fead4c8a370eae426e790a869be8db074ab608cc248",
            "id": 45361,
            "name": "Cloned",
            "nameLocation": "234:6:127",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 45360,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 45355,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "by",
                  "nameLocation": "257:2:127",
                  "nodeType": "VariableDeclaration",
                  "scope": 45361,
                  "src": "241:18:127",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 45354,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "241:7:127",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 45357,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "master",
                  "nameLocation": "277:6:127",
                  "nodeType": "VariableDeclaration",
                  "scope": 45361,
                  "src": "261:22:127",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 45356,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "261:7:127",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 45359,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "clone",
                  "nameLocation": "301:5:127",
                  "nodeType": "VariableDeclaration",
                  "scope": 45361,
                  "src": "285:21:127",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 45358,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "285:7:127",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "240:67:127"
            },
            "src": "228:80:127"
          },
          {
            "body": {
              "id": 45370,
              "nodeType": "Block",
              "src": "346:76:127",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 45364,
                          "name": "cloned",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 45414,
                          "src": "365:6:127",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_bool_$",
                            "typeString": "function () view returns (bool)"
                          }
                        },
                        "id": 45365,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "365:8:127",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "436c6f6e61626c653a206f6e6c79206f6e20636c6f6e6573",
                        "id": 45366,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "375:26:127",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_679c3eba4e7d658297efbb8047c8787b8adf0086ae8149ace5cf10d6f2df7de4",
                          "typeString": "literal_string \"Clonable: only on clones\""
                        },
                        "value": "Clonable: only on clones"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_679c3eba4e7d658297efbb8047c8787b8adf0086ae8149ace5cf10d6f2df7de4",
                          "typeString": "literal_string \"Clonable: only on clones\""
                        }
                      ],
                      "id": 45363,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "357:7:127",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 45367,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "357:45:127",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 45368,
                  "nodeType": "ExpressionStatement",
                  "src": "357:45:127"
                },
                {
                  "id": 45369,
                  "nodeType": "PlaceholderStatement",
                  "src": "413:1:127"
                }
              ]
            },
            "id": 45371,
            "name": "onlyOnClones",
            "nameLocation": "325:12:127",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 45362,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "338:0:127"
            },
            "src": "316:106:127",
            "virtual": true,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 45381,
              "nodeType": "Block",
              "src": "459:77:127",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 45376,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "UnaryOperation",
                        "operator": "!",
                        "prefix": true,
                        "src": "478:9:127",
                        "subExpression": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 45374,
                            "name": "cloned",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 45414,
                            "src": "479:6:127",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$_t_bool_$",
                              "typeString": "function () view returns (bool)"
                            }
                          },
                          "id": 45375,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "479:8:127",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "436c6f6e61626c653a206e6f74206f6e20636c6f6e6573",
                        "id": 45377,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "489:25:127",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_6c8d6ab6c355fbee6991366178d616f7020664f3d5ef700c3a324122b0d63803",
                          "typeString": "literal_string \"Clonable: not on clones\""
                        },
                        "value": "Clonable: not on clones"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_6c8d6ab6c355fbee6991366178d616f7020664f3d5ef700c3a324122b0d63803",
                          "typeString": "literal_string \"Clonable: not on clones\""
                        }
                      ],
                      "id": 45373,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "470:7:127",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 45378,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "470:45:127",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 45379,
                  "nodeType": "ExpressionStatement",
                  "src": "470:45:127"
                },
                {
                  "id": 45380,
                  "nodeType": "PlaceholderStatement",
                  "src": "527:1:127"
                }
              ]
            },
            "id": 45382,
            "name": "notOnClones",
            "nameLocation": "439:11:127",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 45372,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "451:0:127"
            },
            "src": "430:106:127",
            "virtual": true,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 45391,
              "nodeType": "Block",
              "src": "568:82:127",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 45385,
                          "name": "initialized",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 45420,
                          "src": "587:11:127",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_bool_$",
                            "typeString": "function () view returns (bool)"
                          }
                        },
                        "id": 45386,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "587:13:127",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "436c6f6e61626c653a206e6f7420696e697469616c697a6564",
                        "id": 45387,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "602:27:127",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_ce61f321a906d42c94add0f81a303e335ce4d3c44e707c18568ea10a1470b252",
                          "typeString": "literal_string \"Clonable: not initialized\""
                        },
                        "value": "Clonable: not initialized"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_ce61f321a906d42c94add0f81a303e335ce4d3c44e707c18568ea10a1470b252",
                          "typeString": "literal_string \"Clonable: not initialized\""
                        }
                      ],
                      "id": 45384,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "579:7:127",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 45388,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "579:51:127",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 45389,
                  "nodeType": "ExpressionStatement",
                  "src": "579:51:127"
                },
                {
                  "id": 45390,
                  "nodeType": "PlaceholderStatement",
                  "src": "641:1:127"
                }
              ]
            },
            "id": 45392,
            "name": "wasInitialized",
            "nameLocation": "553:14:127",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 45383,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "568:0:127"
            },
            "src": "544:106:127",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 45399,
              "nodeType": "Block",
              "src": "712:32:127",
              "statements": [
                {
                  "expression": {
                    "id": 45397,
                    "name": "__SELF",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 45353,
                    "src": "730:6:127",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 45396,
                  "id": 45398,
                  "nodeType": "Return",
                  "src": "723:13:127"
                }
              ]
            },
            "functionSelector": "5001f3b5",
            "id": 45400,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "base",
            "nameLocation": "667:4:127",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 45393,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "671:2:127"
            },
            "returnParameters": {
              "id": 45396,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 45395,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 45400,
                  "src": "703:7:127",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 45394,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "703:7:127",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "702:9:127"
            },
            "scope": 45518,
            "src": "658:86:127",
            "stateMutability": "view",
            "virtual": true,
            "visibility": "public"
          },
          {
            "body": {
              "id": 45413,
              "nodeType": "Block",
              "src": "896:49:127",
              "statements": [
                {
                  "expression": {
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 45411,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "arguments": [
                        {
                          "id": 45408,
                          "name": "this",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4294967268,
                          "src": "922:4:127",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_Clonable_$45518",
                            "typeString": "contract Clonable"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_Clonable_$45518",
                            "typeString": "contract Clonable"
                          }
                        ],
                        "id": 45407,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "914:7:127",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 45406,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "914:7:127",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 45409,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "914:13:127",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "id": 45410,
                      "name": "__SELF",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 45353,
                      "src": "931:6:127",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "914:23:127",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 45405,
                  "id": 45412,
                  "nodeType": "Return",
                  "src": "907:30:127"
                }
              ]
            },
            "documentation": {
              "id": 45401,
              "nodeType": "StructuredDocumentation",
              "src": "752:62:127",
              "text": "@notice Tells whether this contract is a clone of `self()`"
            },
            "functionSelector": "a04daef0",
            "id": 45414,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "cloned",
            "nameLocation": "829:6:127",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 45402,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "835:2:127"
            },
            "returnParameters": {
              "id": 45405,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 45404,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 45414,
                  "src": "885:4:127",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 45403,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "885:4:127",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "884:6:127"
            },
            "scope": 45518,
            "src": "820:125:127",
            "stateMutability": "view",
            "virtual": true,
            "visibility": "public"
          },
          {
            "documentation": {
              "id": 45415,
              "nodeType": "StructuredDocumentation",
              "src": "953:61:127",
              "text": "@notice Tells whether this instance has been initialized."
            },
            "functionSelector": "158ef93e",
            "id": 45420,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "initialized",
            "nameLocation": "1029:11:127",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 45416,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1040:2:127"
            },
            "returnParameters": {
              "id": 45419,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 45418,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 45420,
                  "src": "1072:4:127",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 45417,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "1072:4:127",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1071:6:127"
            },
            "scope": 45518,
            "src": "1020:58:127",
            "stateMutability": "view",
            "virtual": true,
            "visibility": "public"
          },
          {
            "body": {
              "id": 45450,
              "nodeType": "Block",
              "src": "1611:303:127",
              "statements": [
                {
                  "assignments": [
                    45427
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 45427,
                      "mutability": "mutable",
                      "name": "ptr",
                      "nameLocation": "1635:3:127",
                      "nodeType": "VariableDeclaration",
                      "scope": 45450,
                      "src": "1622:16:127",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 45426,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "1622:5:127",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 45430,
                  "initialValue": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 45428,
                      "name": "_cloneBytecodePtr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 45517,
                      "src": "1641:17:127",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_bytes_memory_ptr_$",
                        "typeString": "function () view returns (bytes memory)"
                      }
                    },
                    "id": 45429,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1641:19:127",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1622:38:127"
                },
                {
                  "AST": {
                    "nativeSrc": "1680:96:127",
                    "nodeType": "YulBlock",
                    "src": "1680:96:127",
                    "statements": [
                      {
                        "nativeSrc": "1732:33:127",
                        "nodeType": "YulAssignment",
                        "src": "1732:33:127",
                        "value": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nativeSrc": "1752:1:127",
                              "nodeType": "YulLiteral",
                              "src": "1752:1:127",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "name": "ptr",
                              "nativeSrc": "1755:3:127",
                              "nodeType": "YulIdentifier",
                              "src": "1755:3:127"
                            },
                            {
                              "kind": "number",
                              "nativeSrc": "1760:4:127",
                              "nodeType": "YulLiteral",
                              "src": "1760:4:127",
                              "type": "",
                              "value": "0x37"
                            }
                          ],
                          "functionName": {
                            "name": "create",
                            "nativeSrc": "1745:6:127",
                            "nodeType": "YulIdentifier",
                            "src": "1745:6:127"
                          },
                          "nativeSrc": "1745:20:127",
                          "nodeType": "YulFunctionCall",
                          "src": "1745:20:127"
                        },
                        "variableNames": [
                          {
                            "name": "_instance",
                            "nativeSrc": "1732:9:127",
                            "nodeType": "YulIdentifier",
                            "src": "1732:9:127"
                          }
                        ]
                      }
                    ]
                  },
                  "evmVersion": "prague",
                  "externalReferences": [
                    {
                      "declaration": 45424,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "1732:9:127",
                      "valueSize": 1
                    },
                    {
                      "declaration": 45427,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "1755:3:127",
                      "valueSize": 1
                    }
                  ],
                  "id": 45431,
                  "nodeType": "InlineAssembly",
                  "src": "1671:105:127"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 45438,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 45433,
                          "name": "_instance",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 45424,
                          "src": "1802:9:127",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 45436,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1823:1:127",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 45435,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "1815:7:127",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 45434,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "1815:7:127",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 45437,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1815:10:127",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "1802:23:127",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "436c6f6e61626c653a20435245415445206661696c6564",
                        "id": 45439,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1827:25:127",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_f8cfba6ed78807628b270dde5bcd8cbfca4a14a698a8ee8cad29a9a244bc492e",
                          "typeString": "literal_string \"Clonable: CREATE failed\""
                        },
                        "value": "Clonable: CREATE failed"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_f8cfba6ed78807628b270dde5bcd8cbfca4a14a698a8ee8cad29a9a244bc492e",
                          "typeString": "literal_string \"Clonable: CREATE failed\""
                        }
                      ],
                      "id": 45432,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "1794:7:127",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 45440,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1794:59:127",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 45441,
                  "nodeType": "ExpressionStatement",
                  "src": "1794:59:127"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 45443,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4294967281,
                          "src": "1876:3:127",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 45444,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "1880:6:127",
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "1876:10:127",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 45445,
                          "name": "base",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 45400,
                          "src": "1888:4:127",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                            "typeString": "function () view returns (address)"
                          }
                        },
                        "id": 45446,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1888:6:127",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 45447,
                        "name": "_instance",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 45424,
                        "src": "1896:9:127",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 45442,
                      "name": "Cloned",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 45361,
                      "src": "1869:6:127",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$returns$__$",
                        "typeString": "function (address,address,address)"
                      }
                    },
                    "id": 45448,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1869:37:127",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 45449,
                  "nodeType": "EmitStatement",
                  "src": "1864:42:127"
                }
              ]
            },
            "documentation": {
              "id": 45421,
              "nodeType": "StructuredDocumentation",
              "src": "1086:440:127",
              "text": "Deploys and returns the address of a minimal proxy clone that replicates contract\n behaviour while using its own EVM storage.\n @dev This function should always provide a new address, no matter how many times \n @dev is actually called from the same `msg.sender`.\n @dev See https://eips.ethereum.org/EIPS/eip-1167.\n @dev See https://blog.openzeppelin.com/deep-dive-into-the-minimal-proxy-contract/."
            },
            "id": 45451,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "__clone",
            "nameLocation": "1541:7:127",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 45422,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1548:2:127"
            },
            "returnParameters": {
              "id": 45425,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 45424,
                  "mutability": "mutable",
                  "name": "_instance",
                  "nameLocation": "1595:9:127",
                  "nodeType": "VariableDeclaration",
                  "scope": 45451,
                  "src": "1587:17:127",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 45423,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1587:7:127",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1586:19:127"
            },
            "scope": 45518,
            "src": "1532:382:127",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 45485,
              "nodeType": "Block",
              "src": "2597:305:127",
              "statements": [
                {
                  "assignments": [
                    45462
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 45462,
                      "mutability": "mutable",
                      "name": "ptr",
                      "nameLocation": "2621:3:127",
                      "nodeType": "VariableDeclaration",
                      "scope": 45485,
                      "src": "2608:16:127",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 45461,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "2608:5:127",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 45465,
                  "initialValue": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 45463,
                      "name": "_cloneBytecodePtr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 45517,
                      "src": "2627:17:127",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_bytes_memory_ptr_$",
                        "typeString": "function () view returns (bytes memory)"
                      }
                    },
                    "id": 45464,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2627:19:127",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2608:38:127"
                },
                {
                  "AST": {
                    "nativeSrc": "2666:105:127",
                    "nodeType": "YulBlock",
                    "src": "2666:105:127",
                    "statements": [
                      {
                        "nativeSrc": "2719:41:127",
                        "nodeType": "YulAssignment",
                        "src": "2719:41:127",
                        "value": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nativeSrc": "2740:1:127",
                              "nodeType": "YulLiteral",
                              "src": "2740:1:127",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "name": "ptr",
                              "nativeSrc": "2743:3:127",
                              "nodeType": "YulIdentifier",
                              "src": "2743:3:127"
                            },
                            {
                              "kind": "number",
                              "nativeSrc": "2748:4:127",
                              "nodeType": "YulLiteral",
                              "src": "2748:4:127",
                              "type": "",
                              "value": "0x37"
                            },
                            {
                              "name": "_salt",
                              "nativeSrc": "2754:5:127",
                              "nodeType": "YulIdentifier",
                              "src": "2754:5:127"
                            }
                          ],
                          "functionName": {
                            "name": "create2",
                            "nativeSrc": "2732:7:127",
                            "nodeType": "YulIdentifier",
                            "src": "2732:7:127"
                          },
                          "nativeSrc": "2732:28:127",
                          "nodeType": "YulFunctionCall",
                          "src": "2732:28:127"
                        },
                        "variableNames": [
                          {
                            "name": "_instance",
                            "nativeSrc": "2719:9:127",
                            "nodeType": "YulIdentifier",
                            "src": "2719:9:127"
                          }
                        ]
                      }
                    ]
                  },
                  "evmVersion": "prague",
                  "externalReferences": [
                    {
                      "declaration": 45459,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "2719:9:127",
                      "valueSize": 1
                    },
                    {
                      "declaration": 45454,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "2754:5:127",
                      "valueSize": 1
                    },
                    {
                      "declaration": 45462,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "2743:3:127",
                      "valueSize": 1
                    }
                  ],
                  "id": 45466,
                  "nodeType": "InlineAssembly",
                  "src": "2657:114:127"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 45473,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 45468,
                          "name": "_instance",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 45459,
                          "src": "2789:9:127",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 45471,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2810:1:127",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 45470,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "2802:7:127",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 45469,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "2802:7:127",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 45472,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2802:10:127",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "2789:23:127",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "436c6f6e61626c653a2043524541544532206661696c6564",
                        "id": 45474,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2814:26:127",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_62587aaa6633c4a97ccbc8d0b840d369355afe237fccc225f604c3b177c5bfdf",
                          "typeString": "literal_string \"Clonable: CREATE2 failed\""
                        },
                        "value": "Clonable: CREATE2 failed"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_62587aaa6633c4a97ccbc8d0b840d369355afe237fccc225f604c3b177c5bfdf",
                          "typeString": "literal_string \"Clonable: CREATE2 failed\""
                        }
                      ],
                      "id": 45467,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "2781:7:127",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 45475,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2781:60:127",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 45476,
                  "nodeType": "ExpressionStatement",
                  "src": "2781:60:127"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 45478,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4294967281,
                          "src": "2864:3:127",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 45479,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "2868:6:127",
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "2864:10:127",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 45480,
                          "name": "base",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 45400,
                          "src": "2876:4:127",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                            "typeString": "function () view returns (address)"
                          }
                        },
                        "id": 45481,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2876:6:127",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 45482,
                        "name": "_instance",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 45459,
                        "src": "2884:9:127",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 45477,
                      "name": "Cloned",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 45361,
                      "src": "2857:6:127",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$returns$__$",
                        "typeString": "function (address,address,address)"
                      }
                    },
                    "id": 45483,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2857:37:127",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 45484,
                  "nodeType": "EmitStatement",
                  "src": "2852:42:127"
                }
              ]
            },
            "documentation": {
              "id": 45452,
              "nodeType": "StructuredDocumentation",
              "src": "1922:543:127",
              "text": "Deploys and returns the address of a minimal proxy clone that replicates contract \n behaviour while using its own EVM storage.\n @dev This function uses the CREATE2 opcode and a `_salt` to deterministically deploy\n @dev the clone. Using the same `_salt` multiple times will revert, since\n @dev no contract can be deployed more than once at the same address.\n @dev See https://eips.ethereum.org/EIPS/eip-1167.\n @dev See https://blog.openzeppelin.com/deep-dive-into-the-minimal-proxy-contract/."
            },
            "id": 45486,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 45457,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 45456,
                  "name": "notOnClones",
                  "nameLocations": [
                    "2543:11:127"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 45382,
                  "src": "2543:11:127"
                },
                "nodeType": "ModifierInvocation",
                "src": "2543:11:127"
              }
            ],
            "name": "__cloneDeterministic",
            "nameLocation": "2480:20:127",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 45455,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 45454,
                  "mutability": "mutable",
                  "name": "_salt",
                  "nameLocation": "2509:5:127",
                  "nodeType": "VariableDeclaration",
                  "scope": 45486,
                  "src": "2501:13:127",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 45453,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2501:7:127",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2500:15:127"
            },
            "returnParameters": {
              "id": 45460,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 45459,
                  "mutability": "mutable",
                  "name": "_instance",
                  "nameLocation": "2581:9:127",
                  "nodeType": "VariableDeclaration",
                  "scope": 45486,
                  "src": "2573:17:127",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 45458,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2573:7:127",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2572:19:127"
            },
            "scope": 45518,
            "src": "2471:431:127",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 45503,
              "nodeType": "Block",
              "src": "3054:193:127",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "hexValue": "3d602d80600a3d3981f3363d3d373d3d3d363d73",
                        "id": 45494,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "hexString",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3103:45:127",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_72307939328b75c6e301a012c75e0a4e690a99036b95f6e6f4f1b5aba02a9ce4",
                          "typeString": "literal_string hex\"3d602d80600a3d3981f3363d3d373d3d3d363d73\""
                        }
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 45497,
                              "name": "base",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 45400,
                              "src": "3171:4:127",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                                "typeString": "function () view returns (address)"
                              }
                            },
                            "id": 45498,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3171:6:127",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 45496,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "3163:7:127",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_bytes20_$",
                            "typeString": "type(bytes20)"
                          },
                          "typeName": {
                            "id": 45495,
                            "name": "bytes20",
                            "nodeType": "ElementaryTypeName",
                            "src": "3163:7:127",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 45499,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3163:15:127",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes20",
                          "typeString": "bytes20"
                        }
                      },
                      {
                        "hexValue": "5af43d82803e903d91602b57fd5bf3",
                        "id": 45500,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "hexString",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3193:35:127",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_11a195f66c9175f46895bae2006d40848a680c7068b9fc4af248ff9a54a47e45",
                          "typeString": "literal_string hex\"5af43d82803e903d91602b57fd5bf3\""
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_stringliteral_72307939328b75c6e301a012c75e0a4e690a99036b95f6e6f4f1b5aba02a9ce4",
                          "typeString": "literal_string hex\"3d602d80600a3d3981f3363d3d373d3d3d363d73\""
                        },
                        {
                          "typeIdentifier": "t_bytes20",
                          "typeString": "bytes20"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_11a195f66c9175f46895bae2006d40848a680c7068b9fc4af248ff9a54a47e45",
                          "typeString": "literal_string hex\"5af43d82803e903d91602b57fd5bf3\""
                        }
                      ],
                      "expression": {
                        "id": 45492,
                        "name": "abi",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4294967295,
                        "src": "3072:3:127",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_abi",
                          "typeString": "abi"
                        }
                      },
                      "id": 45493,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberLocation": "3076:12:127",
                      "memberName": "encodePacked",
                      "nodeType": "MemberAccess",
                      "src": "3072:16:127",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                        "typeString": "function () pure returns (bytes memory)"
                      }
                    },
                    "id": 45501,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3072:167:127",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "functionReturnParameters": 45491,
                  "id": 45502,
                  "nodeType": "Return",
                  "src": "3065:174:127"
                }
              ]
            },
            "documentation": {
              "id": 45487,
              "nodeType": "StructuredDocumentation",
              "src": "2910:52:127",
              "text": "@notice Returns minimal proxy's deploy bytecode."
            },
            "id": 45504,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_cloneBytecode",
            "nameLocation": "2977:14:127",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 45488,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2991:2:127"
            },
            "returnParameters": {
              "id": 45491,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 45490,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 45504,
                  "src": "3035:12:127",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 45489,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "3035:5:127",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3034:14:127"
            },
            "scope": 45518,
            "src": "2968:279:127",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 45516,
              "nodeType": "Block",
              "src": "3420:573:127",
              "statements": [
                {
                  "assignments": [
                    45511
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 45511,
                      "mutability": "mutable",
                      "name": "_base",
                      "nameLocation": "3439:5:127",
                      "nodeType": "VariableDeclaration",
                      "scope": 45516,
                      "src": "3431:13:127",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 45510,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "3431:7:127",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 45514,
                  "initialValue": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 45512,
                      "name": "base",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 45400,
                      "src": "3447:4:127",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                        "typeString": "function () view returns (address)"
                      }
                    },
                    "id": 45513,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3447:6:127",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3431:22:127"
                },
                {
                  "AST": {
                    "nativeSrc": "3473:513:127",
                    "nodeType": "YulBlock",
                    "src": "3473:513:127",
                    "statements": [
                      {
                        "nativeSrc": "3521:18:127",
                        "nodeType": "YulAssignment",
                        "src": "3521:18:127",
                        "value": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nativeSrc": "3534:4:127",
                              "nodeType": "YulLiteral",
                              "src": "3534:4:127",
                              "type": "",
                              "value": "0x40"
                            }
                          ],
                          "functionName": {
                            "name": "mload",
                            "nativeSrc": "3528:5:127",
                            "nodeType": "YulIdentifier",
                            "src": "3528:5:127"
                          },
                          "nativeSrc": "3528:11:127",
                          "nodeType": "YulFunctionCall",
                          "src": "3528:11:127"
                        },
                        "variableNames": [
                          {
                            "name": "ptr",
                            "nativeSrc": "3521:3:127",
                            "nodeType": "YulIdentifier",
                            "src": "3521:3:127"
                          }
                        ]
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "name": "ptr",
                              "nativeSrc": "3619:3:127",
                              "nodeType": "YulIdentifier",
                              "src": "3619:3:127"
                            },
                            {
                              "kind": "number",
                              "nativeSrc": "3624:66:127",
                              "nodeType": "YulLiteral",
                              "src": "3624:66:127",
                              "type": "",
                              "value": "0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nativeSrc": "3612:6:127",
                            "nodeType": "YulIdentifier",
                            "src": "3612:6:127"
                          },
                          "nativeSrc": "3612:79:127",
                          "nodeType": "YulFunctionCall",
                          "src": "3612:79:127"
                        },
                        "nativeSrc": "3612:79:127",
                        "nodeType": "YulExpressionStatement",
                        "src": "3612:79:127"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "ptr",
                                  "nativeSrc": "3785:3:127",
                                  "nodeType": "YulIdentifier",
                                  "src": "3785:3:127"
                                },
                                {
                                  "kind": "number",
                                  "nativeSrc": "3790:4:127",
                                  "nodeType": "YulLiteral",
                                  "src": "3790:4:127",
                                  "type": "",
                                  "value": "0x14"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nativeSrc": "3781:3:127",
                                "nodeType": "YulIdentifier",
                                "src": "3781:3:127"
                              },
                              "nativeSrc": "3781:14:127",
                              "nodeType": "YulFunctionCall",
                              "src": "3781:14:127"
                            },
                            {
                              "arguments": [
                                {
                                  "kind": "number",
                                  "nativeSrc": "3801:4:127",
                                  "nodeType": "YulLiteral",
                                  "src": "3801:4:127",
                                  "type": "",
                                  "value": "0x60"
                                },
                                {
                                  "name": "_base",
                                  "nativeSrc": "3807:5:127",
                                  "nodeType": "YulIdentifier",
                                  "src": "3807:5:127"
                                }
                              ],
                              "functionName": {
                                "name": "shl",
                                "nativeSrc": "3797:3:127",
                                "nodeType": "YulIdentifier",
                                "src": "3797:3:127"
                              },
                              "nativeSrc": "3797:16:127",
                              "nodeType": "YulFunctionCall",
                              "src": "3797:16:127"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nativeSrc": "3774:6:127",
                            "nodeType": "YulIdentifier",
                            "src": "3774:6:127"
                          },
                          "nativeSrc": "3774:40:127",
                          "nodeType": "YulFunctionCall",
                          "src": "3774:40:127"
                        },
                        "nativeSrc": "3774:40:127",
                        "nodeType": "YulExpressionStatement",
                        "src": "3774:40:127"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "ptr",
                                  "nativeSrc": "3896:3:127",
                                  "nodeType": "YulIdentifier",
                                  "src": "3896:3:127"
                                },
                                {
                                  "kind": "number",
                                  "nativeSrc": "3901:4:127",
                                  "nodeType": "YulLiteral",
                                  "src": "3901:4:127",
                                  "type": "",
                                  "value": "0x28"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nativeSrc": "3892:3:127",
                                "nodeType": "YulIdentifier",
                                "src": "3892:3:127"
                              },
                              "nativeSrc": "3892:14:127",
                              "nodeType": "YulFunctionCall",
                              "src": "3892:14:127"
                            },
                            {
                              "kind": "number",
                              "nativeSrc": "3908:66:127",
                              "nodeType": "YulLiteral",
                              "src": "3908:66:127",
                              "type": "",
                              "value": "0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nativeSrc": "3885:6:127",
                            "nodeType": "YulIdentifier",
                            "src": "3885:6:127"
                          },
                          "nativeSrc": "3885:90:127",
                          "nodeType": "YulFunctionCall",
                          "src": "3885:90:127"
                        },
                        "nativeSrc": "3885:90:127",
                        "nodeType": "YulExpressionStatement",
                        "src": "3885:90:127"
                      }
                    ]
                  },
                  "evmVersion": "prague",
                  "externalReferences": [
                    {
                      "declaration": 45511,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "3807:5:127",
                      "valueSize": 1
                    },
                    {
                      "declaration": 45508,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "3521:3:127",
                      "valueSize": 1
                    },
                    {
                      "declaration": 45508,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "3619:3:127",
                      "valueSize": 1
                    },
                    {
                      "declaration": 45508,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "3785:3:127",
                      "valueSize": 1
                    },
                    {
                      "declaration": 45508,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "3896:3:127",
                      "valueSize": 1
                    }
                  ],
                  "id": 45515,
                  "nodeType": "InlineAssembly",
                  "src": "3464:522:127"
                }
              ]
            },
            "documentation": {
              "id": 45505,
              "nodeType": "StructuredDocumentation",
              "src": "3255:67:127",
              "text": "@notice Returns mem pointer to minimal proxy's deploy bytecode."
            },
            "id": 45517,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_cloneBytecodePtr",
            "nameLocation": "3337:17:127",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 45506,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3354:2:127"
            },
            "returnParameters": {
              "id": 45509,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 45508,
                  "mutability": "mutable",
                  "name": "ptr",
                  "nameLocation": "3410:3:127",
                  "nodeType": "VariableDeclaration",
                  "scope": 45517,
                  "src": "3397:16:127",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 45507,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "3397:5:127",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3396:18:127"
            },
            "scope": 45518,
            "src": "3328:665:127",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "private"
          }
        ],
        "scope": 45519,
        "src": "104:3892:127",
        "usedErrors": [
          16,
          19
        ],
        "usedEvents": [
          24,
          45361
        ]
      }
    ],
    "src": "35:3961:127"
  },
  "compiler": {
    "name": "solc",
    "version": "0.8.30+commit.73712a01.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.4.16",
  "updatedAt": "2025-10-15T14:34:46.048Z",
  "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."
      }
    },
    "kind": "dev",
    "methods": {},
    "version": 1
  },
  "userdoc": {
    "kind": "user",
    "methods": {
      "cloned()": {
        "notice": "Tells whether this contract is a clone of `self()`"
      },
      "initialized()": {
        "notice": "Tells whether this instance has been initialized."
      }
    },
    "version": 1
  }
}