{
  "contractName": "CloneFactoryMock",
  "abi": [
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "proxyAddress",
          "type": "address"
        }
      ],
      "name": "CloneCreated",
      "type": "event"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "target",
          "type": "address"
        }
      ],
      "name": "createClone",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "target",
          "type": "address"
        },
        {
          "internalType": "bytes32",
          "name": "salt",
          "type": "bytes32"
        }
      ],
      "name": "createClone2",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "contractAddress",
          "type": "address"
        }
      ],
      "name": "isAddressAvailable",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "target",
          "type": "address"
        },
        {
          "internalType": "bytes32",
          "name": "salt",
          "type": "bytes32"
        }
      ],
      "name": "getClone2Address",
      "outputs": [
        {
          "internalType": "address",
          "name": "cloneAddress",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.6.10+commit.00c0fcaf\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"proxyAddress\",\"type\":\"address\"}],\"name\":\"CloneCreated\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"createClone\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"}],\"name\":\"createClone2\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"}],\"name\":\"getClone2Address\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"cloneAddress\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"isAddressAvailable\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"methods\":{}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"project:/contracts/test-artifacts/CloneFactoryMock.sol\":\"CloneFactoryMock\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":2000000},\"remappings\":[]},\"sources\":{\"project:/contracts/proxies/Clone2Factory.sol\":{\"keccak256\":\"0x5eabefb0d942322d2fecf4f9060b53c6b54a22c741a3ec1e93ffcbbcedf6093a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5075ba4f6f5a099b78d30145db7fe66e02357ec76e1d6efe1d85f0ebc595837d\",\"dweb:/ipfs/QmcZdGyizUDKN9t4t1FDvN7ic6G59FXiFiC5tHK7rKpst8\"]},\"project:/contracts/proxies/Clone2Probe.sol\":{\"keccak256\":\"0x2ed892746cadebdf1c4810f648ad3d65b15581a7078cdb1d9e1e9e6475bef238\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bd836231a996d826f9843bfacc0090cbc8c904ce4261637d574e9f657ded1e2e\",\"dweb:/ipfs/QmY94D7LXRPKstwpUF73K4HxEQbuz1gLgWG5uM6oSjTRUC\"]},\"project:/contracts/proxies/CloneFactory.sol\":{\"keccak256\":\"0x3f2547f3b4f8b1d9bb4ca67a07a2e701ef11c66fab48c6f9fda8aa617d8592db\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fc9e8341cca63da70ba239fd04bba128ceb70f3c12d7568a88aea9309d161528\",\"dweb:/ipfs/QmeNfUzw9giPwBaUxE723AZWoav5NbWohqW2x1mdxNvCyg\"]},\"project:/contracts/proxies/Create2Probe.sol\":{\"keccak256\":\"0xeb9f0df0022fb3af7afbda072058209adfc3778ed7be55f84c2fa3efbd1e6862\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b2b08208b38130508ac6a2acf8ac9655ce525d372c87770270fdcb22e3b6b53a\",\"dweb:/ipfs/QmP8HuAF6FmgT6Vp57poQr1AVxCsCJXvPsjdJ8HfRmgBpb\"]},\"project:/contracts/test-artifacts/CloneFactoryMock.sol\":{\"keccak256\":\"0xbced1ccfb8dd3ccd3bd878f7088df808b730c491f19b893dd4937577d52a948f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0db5bdabb51365ff3cd78c65f5a45f24d4240ba7b7cb6b5fb16892fd355b2fb3\",\"dweb:/ipfs/QmW8sM6io4ZX6ez4EfX2bXbAs6ZNVgy9jPsR37S3qLZ3eE\"]}},\"version\":1}",
  "bytecode": "0x608060405234801561001057600080fd5b50610562806100206000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c8063321660e41461005157806357894c1b1461008c5780639789e5bf146100bf578063dda1670f14610121575b600080fd5b61008a6004803603604081101561006757600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610168565b005b61008a600480360360208110156100a257600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166101e2565b6100f8600480360360408110156100d557600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610254565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6101546004803603602081101561013757600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610285565b604080519115158252519081900360200190f35b600061019073ffffffffffffffffffffffffffffffffffffffff84168363ffffffff6102ae16565b6040805173ffffffffffffffffffffffffffffffffffffffff8316815290519192507fbe2f3d28fdeb5839123d65fd47ec2f5915c715d2b527b9e229123706fdecfc85919081900360200190a1505050565b60006102038273ffffffffffffffffffffffffffffffffffffffff16610400565b6040805173ffffffffffffffffffffffffffffffffffffffff8316815290519192507fbe2f3d28fdeb5839123d65fd47ec2f5915c715d2b527b9e229123706fdecfc85919081900360200190a15050565b600061027c73ffffffffffffffffffffffffffffffffffffffff84168363ffffffff61046416565b90505b92915050565b60006102a68273ffffffffffffffffffffffffffffffffffffffff16610501565b90505b919050565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528360601b60148201527f5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000602882015260378120836101008301527fff0000000000000000000000000000000000000000000000000000000000000060408301523060601b6041830152610100820151605583015280607583015250605560408201209150813b6000811461036d576000925061037c565b6101008201516037836000f592505b505073ffffffffffffffffffffffffffffffffffffffff811661027f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f50524f58595f4445504c4f595f4641494c454400000000000000000000000000604482015290519081900360640190fd5b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528260601b60148201527f5af43d82803e903d91602b57fd5bf3000000000000000000000000000000000060288201526037816000f09392505050565b6040517f3d602d80600a3d3981f3363d3d373d3d3d363d730000000000000000000000008152606092831b60148201527f5af43d82803e903d91602b57fd5bf300000000000000000000000000000000006028820152603781207fff0000000000000000000000000000000000000000000000000000000000000082523090931b6001820152601581019190915260358101919091526055902090565b600073ffffffffffffffffffffffffffffffffffffffff8216610526575060006102a9565b503b159056fea26469706673582212209162628bb758337b20c90d9a7d6e24cf415ef99f2a327b1767eb3ff4a9d7ea4d64736f6c634300060a0033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061004c5760003560e01c8063321660e41461005157806357894c1b1461008c5780639789e5bf146100bf578063dda1670f14610121575b600080fd5b61008a6004803603604081101561006757600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610168565b005b61008a600480360360208110156100a257600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166101e2565b6100f8600480360360408110156100d557600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610254565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6101546004803603602081101561013757600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610285565b604080519115158252519081900360200190f35b600061019073ffffffffffffffffffffffffffffffffffffffff84168363ffffffff6102ae16565b6040805173ffffffffffffffffffffffffffffffffffffffff8316815290519192507fbe2f3d28fdeb5839123d65fd47ec2f5915c715d2b527b9e229123706fdecfc85919081900360200190a1505050565b60006102038273ffffffffffffffffffffffffffffffffffffffff16610400565b6040805173ffffffffffffffffffffffffffffffffffffffff8316815290519192507fbe2f3d28fdeb5839123d65fd47ec2f5915c715d2b527b9e229123706fdecfc85919081900360200190a15050565b600061027c73ffffffffffffffffffffffffffffffffffffffff84168363ffffffff61046416565b90505b92915050565b60006102a68273ffffffffffffffffffffffffffffffffffffffff16610501565b90505b919050565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528360601b60148201527f5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000602882015260378120836101008301527fff0000000000000000000000000000000000000000000000000000000000000060408301523060601b6041830152610100820151605583015280607583015250605560408201209150813b6000811461036d576000925061037c565b6101008201516037836000f592505b505073ffffffffffffffffffffffffffffffffffffffff811661027f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f50524f58595f4445504c4f595f4641494c454400000000000000000000000000604482015290519081900360640190fd5b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528260601b60148201527f5af43d82803e903d91602b57fd5bf3000000000000000000000000000000000060288201526037816000f09392505050565b6040517f3d602d80600a3d3981f3363d3d373d3d3d363d730000000000000000000000008152606092831b60148201527f5af43d82803e903d91602b57fd5bf300000000000000000000000000000000006028820152603781207fff0000000000000000000000000000000000000000000000000000000000000082523090931b6001820152601581019190915260358101919091526055902090565b600073ffffffffffffffffffffffffffffffffffffffff8216610526575060006102a9565b503b159056fea26469706673582212209162628bb758337b20c90d9a7d6e24cf415ef99f2a327b1767eb3ff4a9d7ea4d64736f6c634300060a0033",
  "immutableReferences": {},
  "sourceMap": "211:832:24:-:0;;;;;;;;;;;;;;;;;;;",
  "deployedSourceMap": "211:832:24:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;562:159;;;;;;;;;;;;;;;;-1:-1:-1;562:159:24;;;;;;;;;:::i;:::-;;423:135;;;;;;;;;;;;;;;;-1:-1:-1;423:135:24;;;;:::i;877:164::-;;;;;;;;;;;;;;;;-1:-1:-1;877:164:24;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;725:148;;;;;;;;;;;;;;;;-1:-1:-1;725:148:24;;;;:::i;:::-;;;;;;;;;;;;;;;;;;562:159;643:14;660:25;:19;;;680:4;660:25;:19;:25;:::i;:::-;696:20;;;;;;;;;;643:42;;-1:-1:-1;696:20:24;;;;;;;;;;562:159;;;:::o;423:135::-;485:14;502:20;:6;:18;;;:20::i;:::-;533;;;;;;;;;;485:37;;-1:-1:-1;533:20:24;;;;;;;;;;423:135;;:::o;877:164::-;970:20;1007:29;:23;;;1031:4;1007:29;:23;:29;:::i;:::-;1000:36;;877:164;;;;;:::o;725:148::-;811:4;832:36;:15;:34;;;:36::i;:::-;825:43;;725:148;;;;:::o;905:1710:18:-;991:20;1095:4;1089:11;1238:66;1229:7;1222:83;1347:6;1343:2;1339:15;1332:4;1323:7;1319:18;1312:43;1389:66;1382:4;1373:7;1369:18;1362:94;1732:4;1723:7;1713:24;1794:4;1786:5;1777:7;1773:19;1766:33;1875:66;1868:4;1859:7;1855:18;1848:94;1998:9;1994:2;1990:18;1983:4;1974:7;1970:18;1963:46;2076:5;2067:7;2063:19;2057:26;2050:4;2041:7;2037:18;2030:54;2132:16;2125:4;2116:7;2112:18;2105:44;;2203:4;2196;2187:7;2183:18;2173:35;2157:51;;2235:12;2223:25;2260:1;2255:161;;;;2457:1;2441:17;;2216:250;;2255:161;2400:5;2391:7;2387:19;2381:26;2375:4;2366:7;2363:1;2355:53;2339:69;;2216:250;-1:-1:-1;;2560:26:18;;;2552:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;450:452:20;517:14;613:4;607:11;639:66;632:5;625:81;746:6;742:2;738:15;731:4;724:5;720:16;713:41;786:66;779:4;772:5;768:16;761:92;887:4;880:5;877:1;870:22;860:32;586:312;-1:-1:-1;;;586:312:20:o;201:984:19:-;400:4;394:11;520:66;504:83;;625:2;621:15;;;614:4;601:18;;594:43;671:66;664:4;651:18;;644:94;817:4;798:24;;860:66;844:83;;996:9;988:18;;;982:3;969:17;;962:45;1049:4;1036:18;;1029:32;;;;1103:4;1090:18;;1083:44;;;;1170:4;1151:24;;;371:810::o;202:309:21:-;290:4;307:29;;;304:65;;-1:-1:-1;357:5:21;350:12;;304:65;-1:-1:-1;450:28:21;497:9;;202:309::o",
  "source": "// SPDX-License-Identifier: MIT\npragma solidity ^0.6.0;\n\nimport '../proxies/CloneFactory.sol';\nimport '../proxies/Clone2Factory.sol';\nimport '../proxies/Clone2Probe.sol';\nimport '../proxies/Create2Probe.sol';\n\n\ncontract CloneFactoryMock\n{\n  using CloneFactory for address;\n  using Clone2Factory for address;\n  using Clone2Probe for address;\n  using Create2Probe for address;\n\n  event CloneCreated(address proxyAddress);\n\n  function createClone(\n    address target\n  ) external\n  {\n    address result = target.createClone();\n    emit CloneCreated(result);\n  }\n\n  function createClone2(\n    address target,\n    bytes32 salt\n  ) external\n  {\n    address result = target.createClone2(salt);\n    emit CloneCreated(result);\n  }\n\n  function isAddressAvailable(\n    address contractAddress\n  ) public view\n    returns (bool)\n  {\n    return contractAddress.isAddressAvailable();\n  }\n\n  function getClone2Address(\n    address target,\n    bytes32 salt\n  ) public view\n    returns (address cloneAddress)\n  {\n    return target.getClone2Address(salt);\n  }\n}\n",
  "sourcePath": "/home/circleci/repo/contracts/test-artifacts/CloneFactoryMock.sol",
  "ast": {
    "absolutePath": "project:/contracts/test-artifacts/CloneFactoryMock.sol",
    "exportedSymbols": {
      "CloneFactoryMock": [
        4022
      ]
    },
    "id": 4023,
    "license": "MIT",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 3939,
        "literals": [
          "solidity",
          "^",
          "0.6",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "32:23:24"
      },
      {
        "absolutePath": "project:/contracts/proxies/CloneFactory.sol",
        "file": "../proxies/CloneFactory.sol",
        "id": 3940,
        "nodeType": "ImportDirective",
        "scope": 4023,
        "sourceUnit": 3783,
        "src": "57:37:24",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "project:/contracts/proxies/Clone2Factory.sol",
        "file": "../proxies/Clone2Factory.sol",
        "id": 3941,
        "nodeType": "ImportDirective",
        "scope": 4023,
        "sourceUnit": 3756,
        "src": "95:38:24",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "project:/contracts/proxies/Clone2Probe.sol",
        "file": "../proxies/Clone2Probe.sol",
        "id": 3942,
        "nodeType": "ImportDirective",
        "scope": 4023,
        "sourceUnit": 3770,
        "src": "134:36:24",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "project:/contracts/proxies/Create2Probe.sol",
        "file": "../proxies/Create2Probe.sol",
        "id": 3943,
        "nodeType": "ImportDirective",
        "scope": 4023,
        "sourceUnit": 3812,
        "src": "171:37:24",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 4022,
        "linearizedBaseContracts": [
          4022
        ],
        "name": "CloneFactoryMock",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 3946,
            "libraryName": {
              "contractScope": null,
              "id": 3944,
              "name": "CloneFactory",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 3782,
              "src": "247:12:24",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_CloneFactory_$3782",
                "typeString": "library CloneFactory"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "241:31:24",
            "typeName": {
              "id": 3945,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "264:7:24",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            }
          },
          {
            "id": 3949,
            "libraryName": {
              "contractScope": null,
              "id": 3947,
              "name": "Clone2Factory",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 3755,
              "src": "281:13:24",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Clone2Factory_$3755",
                "typeString": "library Clone2Factory"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "275:32:24",
            "typeName": {
              "id": 3948,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "299:7:24",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            }
          },
          {
            "id": 3952,
            "libraryName": {
              "contractScope": null,
              "id": 3950,
              "name": "Clone2Probe",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 3769,
              "src": "316:11:24",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Clone2Probe_$3769",
                "typeString": "library Clone2Probe"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "310:30:24",
            "typeName": {
              "id": 3951,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "332:7:24",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            }
          },
          {
            "id": 3955,
            "libraryName": {
              "contractScope": null,
              "id": 3953,
              "name": "Create2Probe",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 3811,
              "src": "349:12:24",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Create2Probe_$3811",
                "typeString": "library Create2Probe"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "343:31:24",
            "typeName": {
              "id": 3954,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "366:7:24",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            }
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 3959,
            "name": "CloneCreated",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 3958,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3957,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "proxyAddress",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 3959,
                  "src": "397:20:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3956,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "397:7:24",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "396:22:24"
            },
            "src": "378:41:24"
          },
          {
            "body": {
              "id": 3974,
              "nodeType": "Block",
              "src": "479:79:24",
              "statements": [
                {
                  "assignments": [
                    3965
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3965,
                      "mutability": "mutable",
                      "name": "result",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 3974,
                      "src": "485:14:24",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 3964,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "485:7:24",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3969,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 3966,
                        "name": "target",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3961,
                        "src": "502:6:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "id": 3967,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "createClone",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3781,
                      "src": "502:18:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$_t_address_$bound_to$_t_address_$",
                        "typeString": "function (address) returns (address)"
                      }
                    },
                    "id": 3968,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "502:20:24",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "485:37:24"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 3971,
                        "name": "result",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3965,
                        "src": "546:6:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 3970,
                      "name": "CloneCreated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3959,
                      "src": "533:12:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 3972,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "533:20:24",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3973,
                  "nodeType": "EmitStatement",
                  "src": "528:25:24"
                }
              ]
            },
            "documentation": null,
            "functionSelector": "57894c1b",
            "id": 3975,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "createClone",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 3962,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3961,
                  "mutability": "mutable",
                  "name": "target",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 3975,
                  "src": "449:14:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3960,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "449:7:24",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "443:24:24"
            },
            "returnParameters": {
              "id": 3963,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "479:0:24"
            },
            "scope": 4022,
            "src": "423:135:24",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 3993,
              "nodeType": "Block",
              "src": "637:84:24",
              "statements": [
                {
                  "assignments": [
                    3983
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3983,
                      "mutability": "mutable",
                      "name": "result",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 3993,
                      "src": "643:14:24",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 3982,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "643:7:24",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3988,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 3986,
                        "name": "salt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3979,
                        "src": "680:4:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 3984,
                        "name": "target",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3977,
                        "src": "660:6:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "id": 3985,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "createClone2",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3754,
                      "src": "660:19:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes32_$returns$_t_address_$bound_to$_t_address_$",
                        "typeString": "function (address,bytes32) returns (address)"
                      }
                    },
                    "id": 3987,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "660:25:24",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "643:42:24"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 3990,
                        "name": "result",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3983,
                        "src": "709:6:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 3989,
                      "name": "CloneCreated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3959,
                      "src": "696:12:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 3991,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "696:20:24",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3992,
                  "nodeType": "EmitStatement",
                  "src": "691:25:24"
                }
              ]
            },
            "documentation": null,
            "functionSelector": "321660e4",
            "id": 3994,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "createClone2",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 3980,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3977,
                  "mutability": "mutable",
                  "name": "target",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 3994,
                  "src": "589:14:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3976,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "589:7:24",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3979,
                  "mutability": "mutable",
                  "name": "salt",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 3994,
                  "src": "609:12:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 3978,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "609:7:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "583:42:24"
            },
            "returnParameters": {
              "id": 3981,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "637:0:24"
            },
            "scope": 4022,
            "src": "562:159:24",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 4005,
              "nodeType": "Block",
              "src": "819:54:24",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 4001,
                        "name": "contractAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3996,
                        "src": "832:15:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "id": 4002,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "isAddressAvailable",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3810,
                      "src": "832:34:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$bound_to$_t_address_$",
                        "typeString": "function (address) view returns (bool)"
                      }
                    },
                    "id": 4003,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "832:36:24",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 4000,
                  "id": 4004,
                  "nodeType": "Return",
                  "src": "825:43:24"
                }
              ]
            },
            "documentation": null,
            "functionSelector": "dda1670f",
            "id": 4006,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isAddressAvailable",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 3997,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3996,
                  "mutability": "mutable",
                  "name": "contractAddress",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 4006,
                  "src": "758:23:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3995,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "758:7:24",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "752:33:24"
            },
            "returnParameters": {
              "id": 4000,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3999,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 4006,
                  "src": "811:4:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 3998,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "811:4:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "810:6:24"
            },
            "scope": 4022,
            "src": "725:148:24",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4020,
              "nodeType": "Block",
              "src": "994:47:24",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4017,
                        "name": "salt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4010,
                        "src": "1031:4:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 4015,
                        "name": "target",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4008,
                        "src": "1007:6:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "id": 4016,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "getClone2Address",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3768,
                      "src": "1007:23:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$_t_bytes32_$returns$_t_address_$bound_to$_t_address_$",
                        "typeString": "function (address,bytes32) view returns (address)"
                      }
                    },
                    "id": 4018,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1007:29:24",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 4014,
                  "id": 4019,
                  "nodeType": "Return",
                  "src": "1000:36:24"
                }
              ]
            },
            "documentation": null,
            "functionSelector": "9789e5bf",
            "id": 4021,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getClone2Address",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 4011,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4008,
                  "mutability": "mutable",
                  "name": "target",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 4021,
                  "src": "908:14:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4007,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "908:7:24",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4010,
                  "mutability": "mutable",
                  "name": "salt",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 4021,
                  "src": "928:12:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 4009,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "928:7:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "902:42:24"
            },
            "returnParameters": {
              "id": 4014,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4013,
                  "mutability": "mutable",
                  "name": "cloneAddress",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 4021,
                  "src": "970:20:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4012,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "970:7:24",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "969:22:24"
            },
            "scope": 4022,
            "src": "877:164:24",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          }
        ],
        "scope": 4023,
        "src": "211:832:24"
      }
    ],
    "src": "32:1012:24"
  },
  "legacyAST": {
    "attributes": {
      "absolutePath": "project:/contracts/test-artifacts/CloneFactoryMock.sol",
      "exportedSymbols": {
        "CloneFactoryMock": [
          4022
        ]
      },
      "license": "MIT"
    },
    "children": [
      {
        "attributes": {
          "literals": [
            "solidity",
            "^",
            "0.6",
            ".0"
          ]
        },
        "id": 3939,
        "name": "PragmaDirective",
        "src": "32:23:24"
      },
      {
        "attributes": {
          "SourceUnit": 3783,
          "absolutePath": "project:/contracts/proxies/CloneFactory.sol",
          "file": "../proxies/CloneFactory.sol",
          "scope": 4023,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 3940,
        "name": "ImportDirective",
        "src": "57:37:24"
      },
      {
        "attributes": {
          "SourceUnit": 3756,
          "absolutePath": "project:/contracts/proxies/Clone2Factory.sol",
          "file": "../proxies/Clone2Factory.sol",
          "scope": 4023,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 3941,
        "name": "ImportDirective",
        "src": "95:38:24"
      },
      {
        "attributes": {
          "SourceUnit": 3770,
          "absolutePath": "project:/contracts/proxies/Clone2Probe.sol",
          "file": "../proxies/Clone2Probe.sol",
          "scope": 4023,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 3942,
        "name": "ImportDirective",
        "src": "134:36:24"
      },
      {
        "attributes": {
          "SourceUnit": 3812,
          "absolutePath": "project:/contracts/proxies/Create2Probe.sol",
          "file": "../proxies/Create2Probe.sol",
          "scope": 4023,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 3943,
        "name": "ImportDirective",
        "src": "171:37:24"
      },
      {
        "attributes": {
          "abstract": false,
          "baseContracts": [
            null
          ],
          "contractDependencies": [
            null
          ],
          "contractKind": "contract",
          "documentation": null,
          "fullyImplemented": true,
          "linearizedBaseContracts": [
            4022
          ],
          "name": "CloneFactoryMock",
          "scope": 4023
        },
        "children": [
          {
            "children": [
              {
                "attributes": {
                  "contractScope": null,
                  "name": "CloneFactory",
                  "referencedDeclaration": 3782,
                  "type": "library CloneFactory"
                },
                "id": 3944,
                "name": "UserDefinedTypeName",
                "src": "247:12:24"
              },
              {
                "attributes": {
                  "name": "address",
                  "stateMutability": "nonpayable",
                  "type": "address"
                },
                "id": 3945,
                "name": "ElementaryTypeName",
                "src": "264:7:24"
              }
            ],
            "id": 3946,
            "name": "UsingForDirective",
            "src": "241:31:24"
          },
          {
            "children": [
              {
                "attributes": {
                  "contractScope": null,
                  "name": "Clone2Factory",
                  "referencedDeclaration": 3755,
                  "type": "library Clone2Factory"
                },
                "id": 3947,
                "name": "UserDefinedTypeName",
                "src": "281:13:24"
              },
              {
                "attributes": {
                  "name": "address",
                  "stateMutability": "nonpayable",
                  "type": "address"
                },
                "id": 3948,
                "name": "ElementaryTypeName",
                "src": "299:7:24"
              }
            ],
            "id": 3949,
            "name": "UsingForDirective",
            "src": "275:32:24"
          },
          {
            "children": [
              {
                "attributes": {
                  "contractScope": null,
                  "name": "Clone2Probe",
                  "referencedDeclaration": 3769,
                  "type": "library Clone2Probe"
                },
                "id": 3950,
                "name": "UserDefinedTypeName",
                "src": "316:11:24"
              },
              {
                "attributes": {
                  "name": "address",
                  "stateMutability": "nonpayable",
                  "type": "address"
                },
                "id": 3951,
                "name": "ElementaryTypeName",
                "src": "332:7:24"
              }
            ],
            "id": 3952,
            "name": "UsingForDirective",
            "src": "310:30:24"
          },
          {
            "children": [
              {
                "attributes": {
                  "contractScope": null,
                  "name": "Create2Probe",
                  "referencedDeclaration": 3811,
                  "type": "library Create2Probe"
                },
                "id": 3953,
                "name": "UserDefinedTypeName",
                "src": "349:12:24"
              },
              {
                "attributes": {
                  "name": "address",
                  "stateMutability": "nonpayable",
                  "type": "address"
                },
                "id": 3954,
                "name": "ElementaryTypeName",
                "src": "366:7:24"
              }
            ],
            "id": 3955,
            "name": "UsingForDirective",
            "src": "343:31:24"
          },
          {
            "attributes": {
              "anonymous": false,
              "documentation": null,
              "name": "CloneCreated"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "indexed": false,
                      "mutability": "mutable",
                      "name": "proxyAddress",
                      "overrides": null,
                      "scope": 3959,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 3956,
                        "name": "ElementaryTypeName",
                        "src": "397:7:24"
                      }
                    ],
                    "id": 3957,
                    "name": "VariableDeclaration",
                    "src": "397:20:24"
                  }
                ],
                "id": 3958,
                "name": "ParameterList",
                "src": "396:22:24"
              }
            ],
            "id": 3959,
            "name": "EventDefinition",
            "src": "378:41:24"
          },
          {
            "attributes": {
              "documentation": null,
              "functionSelector": "57894c1b",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "createClone",
              "overrides": null,
              "scope": 4022,
              "stateMutability": "nonpayable",
              "virtual": false,
              "visibility": "external"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "target",
                      "overrides": null,
                      "scope": 3975,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 3960,
                        "name": "ElementaryTypeName",
                        "src": "449:7:24"
                      }
                    ],
                    "id": 3961,
                    "name": "VariableDeclaration",
                    "src": "449:14:24"
                  }
                ],
                "id": 3962,
                "name": "ParameterList",
                "src": "443:24:24"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 3963,
                "name": "ParameterList",
                "src": "479:0:24"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "assignments": [
                        3965
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "result",
                          "overrides": null,
                          "scope": 3974,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "address",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "address",
                              "stateMutability": "nonpayable",
                              "type": "address"
                            },
                            "id": 3964,
                            "name": "ElementaryTypeName",
                            "src": "485:7:24"
                          }
                        ],
                        "id": 3965,
                        "name": "VariableDeclaration",
                        "src": "485:14:24"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "arguments": [
                            null
                          ],
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "address",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                null
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "createClone",
                              "referencedDeclaration": 3781,
                              "type": "function (address) returns (address)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 3961,
                                  "type": "address",
                                  "value": "target"
                                },
                                "id": 3966,
                                "name": "Identifier",
                                "src": "502:6:24"
                              }
                            ],
                            "id": 3967,
                            "name": "MemberAccess",
                            "src": "502:18:24"
                          }
                        ],
                        "id": 3968,
                        "name": "FunctionCall",
                        "src": "502:20:24"
                      }
                    ],
                    "id": 3969,
                    "name": "VariableDeclarationStatement",
                    "src": "485:37:24"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3959,
                              "type": "function (address)",
                              "value": "CloneCreated"
                            },
                            "id": 3970,
                            "name": "Identifier",
                            "src": "533:12:24"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3965,
                              "type": "address",
                              "value": "result"
                            },
                            "id": 3971,
                            "name": "Identifier",
                            "src": "546:6:24"
                          }
                        ],
                        "id": 3972,
                        "name": "FunctionCall",
                        "src": "533:20:24"
                      }
                    ],
                    "id": 3973,
                    "name": "EmitStatement",
                    "src": "528:25:24"
                  }
                ],
                "id": 3974,
                "name": "Block",
                "src": "479:79:24"
              }
            ],
            "id": 3975,
            "name": "FunctionDefinition",
            "src": "423:135:24"
          },
          {
            "attributes": {
              "documentation": null,
              "functionSelector": "321660e4",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "createClone2",
              "overrides": null,
              "scope": 4022,
              "stateMutability": "nonpayable",
              "virtual": false,
              "visibility": "external"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "target",
                      "overrides": null,
                      "scope": 3994,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 3976,
                        "name": "ElementaryTypeName",
                        "src": "589:7:24"
                      }
                    ],
                    "id": 3977,
                    "name": "VariableDeclaration",
                    "src": "589:14:24"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "salt",
                      "overrides": null,
                      "scope": 3994,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes32",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes32",
                          "type": "bytes32"
                        },
                        "id": 3978,
                        "name": "ElementaryTypeName",
                        "src": "609:7:24"
                      }
                    ],
                    "id": 3979,
                    "name": "VariableDeclaration",
                    "src": "609:12:24"
                  }
                ],
                "id": 3980,
                "name": "ParameterList",
                "src": "583:42:24"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 3981,
                "name": "ParameterList",
                "src": "637:0:24"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "assignments": [
                        3983
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "result",
                          "overrides": null,
                          "scope": 3993,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "address",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "address",
                              "stateMutability": "nonpayable",
                              "type": "address"
                            },
                            "id": 3982,
                            "name": "ElementaryTypeName",
                            "src": "643:7:24"
                          }
                        ],
                        "id": 3983,
                        "name": "VariableDeclaration",
                        "src": "643:14:24"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "address",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "createClone2",
                              "referencedDeclaration": 3754,
                              "type": "function (address,bytes32) returns (address)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 3977,
                                  "type": "address",
                                  "value": "target"
                                },
                                "id": 3984,
                                "name": "Identifier",
                                "src": "660:6:24"
                              }
                            ],
                            "id": 3985,
                            "name": "MemberAccess",
                            "src": "660:19:24"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3979,
                              "type": "bytes32",
                              "value": "salt"
                            },
                            "id": 3986,
                            "name": "Identifier",
                            "src": "680:4:24"
                          }
                        ],
                        "id": 3987,
                        "name": "FunctionCall",
                        "src": "660:25:24"
                      }
                    ],
                    "id": 3988,
                    "name": "VariableDeclarationStatement",
                    "src": "643:42:24"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3959,
                              "type": "function (address)",
                              "value": "CloneCreated"
                            },
                            "id": 3989,
                            "name": "Identifier",
                            "src": "696:12:24"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3983,
                              "type": "address",
                              "value": "result"
                            },
                            "id": 3990,
                            "name": "Identifier",
                            "src": "709:6:24"
                          }
                        ],
                        "id": 3991,
                        "name": "FunctionCall",
                        "src": "696:20:24"
                      }
                    ],
                    "id": 3992,
                    "name": "EmitStatement",
                    "src": "691:25:24"
                  }
                ],
                "id": 3993,
                "name": "Block",
                "src": "637:84:24"
              }
            ],
            "id": 3994,
            "name": "FunctionDefinition",
            "src": "562:159:24"
          },
          {
            "attributes": {
              "documentation": null,
              "functionSelector": "dda1670f",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "isAddressAvailable",
              "overrides": null,
              "scope": 4022,
              "stateMutability": "view",
              "virtual": false,
              "visibility": "public"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "contractAddress",
                      "overrides": null,
                      "scope": 4006,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 3995,
                        "name": "ElementaryTypeName",
                        "src": "758:7:24"
                      }
                    ],
                    "id": 3996,
                    "name": "VariableDeclaration",
                    "src": "758:23:24"
                  }
                ],
                "id": 3997,
                "name": "ParameterList",
                "src": "752:33:24"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "",
                      "overrides": null,
                      "scope": 4006,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bool",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bool",
                          "type": "bool"
                        },
                        "id": 3998,
                        "name": "ElementaryTypeName",
                        "src": "811:4:24"
                      }
                    ],
                    "id": 3999,
                    "name": "VariableDeclaration",
                    "src": "811:4:24"
                  }
                ],
                "id": 4000,
                "name": "ParameterList",
                "src": "810:6:24"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "functionReturnParameters": 4000
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "arguments": [
                            null
                          ],
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "bool",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                null
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "isAddressAvailable",
                              "referencedDeclaration": 3810,
                              "type": "function (address) view returns (bool)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 3996,
                                  "type": "address",
                                  "value": "contractAddress"
                                },
                                "id": 4001,
                                "name": "Identifier",
                                "src": "832:15:24"
                              }
                            ],
                            "id": 4002,
                            "name": "MemberAccess",
                            "src": "832:34:24"
                          }
                        ],
                        "id": 4003,
                        "name": "FunctionCall",
                        "src": "832:36:24"
                      }
                    ],
                    "id": 4004,
                    "name": "Return",
                    "src": "825:43:24"
                  }
                ],
                "id": 4005,
                "name": "Block",
                "src": "819:54:24"
              }
            ],
            "id": 4006,
            "name": "FunctionDefinition",
            "src": "725:148:24"
          },
          {
            "attributes": {
              "documentation": null,
              "functionSelector": "9789e5bf",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "getClone2Address",
              "overrides": null,
              "scope": 4022,
              "stateMutability": "view",
              "virtual": false,
              "visibility": "public"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "target",
                      "overrides": null,
                      "scope": 4021,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 4007,
                        "name": "ElementaryTypeName",
                        "src": "908:7:24"
                      }
                    ],
                    "id": 4008,
                    "name": "VariableDeclaration",
                    "src": "908:14:24"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "salt",
                      "overrides": null,
                      "scope": 4021,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes32",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes32",
                          "type": "bytes32"
                        },
                        "id": 4009,
                        "name": "ElementaryTypeName",
                        "src": "928:7:24"
                      }
                    ],
                    "id": 4010,
                    "name": "VariableDeclaration",
                    "src": "928:12:24"
                  }
                ],
                "id": 4011,
                "name": "ParameterList",
                "src": "902:42:24"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "cloneAddress",
                      "overrides": null,
                      "scope": 4021,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 4012,
                        "name": "ElementaryTypeName",
                        "src": "970:7:24"
                      }
                    ],
                    "id": 4013,
                    "name": "VariableDeclaration",
                    "src": "970:20:24"
                  }
                ],
                "id": 4014,
                "name": "ParameterList",
                "src": "969:22:24"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "functionReturnParameters": 4014
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "address",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "getClone2Address",
                              "referencedDeclaration": 3768,
                              "type": "function (address,bytes32) view returns (address)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4008,
                                  "type": "address",
                                  "value": "target"
                                },
                                "id": 4015,
                                "name": "Identifier",
                                "src": "1007:6:24"
                              }
                            ],
                            "id": 4016,
                            "name": "MemberAccess",
                            "src": "1007:23:24"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4010,
                              "type": "bytes32",
                              "value": "salt"
                            },
                            "id": 4017,
                            "name": "Identifier",
                            "src": "1031:4:24"
                          }
                        ],
                        "id": 4018,
                        "name": "FunctionCall",
                        "src": "1007:29:24"
                      }
                    ],
                    "id": 4019,
                    "name": "Return",
                    "src": "1000:36:24"
                  }
                ],
                "id": 4020,
                "name": "Block",
                "src": "994:47:24"
              }
            ],
            "id": 4021,
            "name": "FunctionDefinition",
            "src": "877:164:24"
          }
        ],
        "id": 4022,
        "name": "ContractDefinition",
        "src": "211:832:24"
      }
    ],
    "id": 4023,
    "name": "SourceUnit",
    "src": "32:1012:24"
  },
  "compiler": {
    "name": "solc",
    "version": "0.6.10+commit.00c0fcaf.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.4.1",
  "updatedAt": "2021-07-08T17:04:13.880Z",
  "devdoc": {
    "methods": {}
  },
  "userdoc": {
    "methods": {}
  }
}