{
  "fileName": "ProxyFactory.sol",
  "contractName": "ProxyFactory",
  "source": "pragma solidity ^0.6.0;\n// SPDX-License-Identifier: MIT\n\nimport \"./InitializableAdminUpgradeabilityProxy.sol\";\nimport \"../cryptography/ECDSA.sol\";\n\ncontract ProxyFactory {\n  \n  event ProxyCreated(address proxy);\n\n  bytes32 private contractCodeHash;\n\n  constructor() public {\n    contractCodeHash = keccak256(\n      type(InitializableAdminUpgradeabilityProxy).creationCode\n    );\n  }\n\n  function deployMinimal(address _logic, bytes memory _data) public returns (address proxy) {\n    // Adapted from https://github.com/optionality/clone-factory/blob/32782f82dfc5a00d103a7e61a17a5dedbd1e8e9d/contracts/CloneFactory.sol\n    bytes20 targetBytes = bytes20(_logic);\n    assembly {\n      let clone := mload(0x40)\n      mstore(clone, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\n      mstore(add(clone, 0x14), targetBytes)\n      mstore(add(clone, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)\n      proxy := create(0, clone, 0x37)\n    }\n    \n    emit ProxyCreated(address(proxy));\n\n    if(_data.length > 0) {\n      (bool success,) = proxy.call(_data);\n      require(success);\n    }    \n  }\n\n  function deploy(uint256 _salt, address _logic, address _admin, bytes memory _data) public returns (address) {\n    return _deployProxy(_salt, _logic, _admin, _data, msg.sender);\n  }\n\n  function deploySigned(uint256 _salt, address _logic, address _admin, bytes memory _data, bytes memory _signature) public returns (address) {\n    address signer = getSigner(_salt, _logic, _admin, _data, _signature);\n    require(signer != address(0), \"Invalid signature\");\n    return _deployProxy(_salt, _logic, _admin, _data, signer);\n  }\n\n  function getDeploymentAddress(uint256 _salt, address _sender) public view returns (address) {\n    // Adapted from https://github.com/archanova/solidity/blob/08f8f6bedc6e71c24758d20219b7d0749d75919d/contracts/contractCreator/ContractCreator.sol\n    bytes32 salt = _getSalt(_salt, _sender);\n    bytes32 rawAddress = keccak256(\n      abi.encodePacked(\n        bytes1(0xff),\n        address(this),\n        salt,\n        contractCodeHash\n      )\n    );\n\n    return address(bytes20(rawAddress << 96));\n  }\n\n  function getSigner(uint256 _salt, address _logic, address _admin, bytes memory _data, bytes memory _signature) public view returns (address) {\n    bytes32 msgHash = OpenZeppelinUpgradesECDSA.toEthSignedMessageHash(\n      keccak256(\n        abi.encodePacked(\n          _salt, _logic, _admin, _data, address(this)\n        )\n      )\n    );\n\n    return OpenZeppelinUpgradesECDSA.recover(msgHash, _signature);\n  }\n\n  function _deployProxy(uint256 _salt, address _logic, address _admin, bytes memory _data, address _sender) internal returns (address) {\n    InitializableAdminUpgradeabilityProxy proxy = _createProxy(_salt, _sender);\n    emit ProxyCreated(address(proxy));\n    proxy.initialize(_logic, _admin, _data);\n    return address(proxy);\n  }\n\n  function _createProxy(uint256 _salt, address _sender) internal returns (InitializableAdminUpgradeabilityProxy) {\n    address payable addr;\n    bytes memory code = type(InitializableAdminUpgradeabilityProxy).creationCode;\n    bytes32 salt = _getSalt(_salt, _sender);\n\n    assembly {\n      addr := create2(0, add(code, 0x20), mload(code), salt)\n      if iszero(extcodesize(addr)) {\n        revert(0, 0)\n      }\n    }\n\n    return InitializableAdminUpgradeabilityProxy(addr);\n  }\n\n  function _getSalt(uint256 _salt, address _sender) internal pure returns (bytes32) {\n    return keccak256(abi.encodePacked(_salt, _sender)); \n  }\n}\n",
  "sourcePath": "contracts/upgradeability/ProxyFactory.sol",
  "sourceMap": "148:3386:41:-:0;;;252:130;;;;;;;;;;;315:56;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;298:79;;;;;;279:16;;:98;;;;;;;;;;252:130;148:3386;;;;;;;;;;:::o;:::-;;;;;;;",
  "deployedSourceMap": "148:3386:41:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2164:408;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;1320:337;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;1136:180;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;1661:499;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;386:746;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;2164:408;2296:7;2311:15;2329:170;2432:5;2439:6;2447;2455:5;2470:4;2404:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2385:108;;;;;;2329:48;:170;;:::i;:::-;2311:188;;2513:54;2547:7;2556:10;2513:33;:54;;:::i;:::-;2506:61;;;;;2164:408;;;;;;;;;:::o;1320:337::-;1450:7;1465:14;1482:51;1492:5;1499:6;1507;1515:5;1522:10;1482:9;:51;;:::i;:::-;1465:68;;1565:1;1547:20;;:6;:20;;;;1539:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1602;1615:5;1622:6;1630;1638:5;1645:6;1602:12;:50;;:::i;:::-;1595:57;;;;;1320:337;;;;;;;;;:::o;1136:180::-;1235:7;1257:54;1270:5;1277:6;1285;1293:5;1300:10;1257:12;:54;;:::i;:::-;1250:61;;;;1136:180;;;;;;;:::o;1661:499::-;1744:7;1909:12;1924:24;1933:5;1940:7;1924:8;:24;;:::i;:::-;1909:39;;1954:18;2025:4;2018:12;;2048:4;2063;2077:16;;;;1992:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1975:132;;;;;;1954:153;;2151:2;2137:10;:16;;;;;2121:34;;2114:41;;;;;;1661:499;;;;;;;:::o;386:746::-;461:13;620:19;650:6;642:15;;620:37;;699:4;693:11;725:66;718:5;711:81;824:11;817:4;810:5;806:16;799:37;868:66;861:4;854:5;850:16;843:92;968:4;961:5;958:1;951:22;942:31;;672:307;994:28;1015:5;994:28;;;;;;;;;;;;;;;;;;;;;;1047:1;1032:5;:12;:16;1029:95;;;1059:12;1076:5;:10;;1087:5;1076:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1058:35;;;1109:7;1101:16;;;;;;;;1029:95;;386:746;;;;;;:::o;3174:265:5:-;3243:7;3426:4;3373:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3363:69;;;;;;3356:76;;;;3174:265;;;;:::o;1133:1891::-;1211:7;1292:2;1272:9;:16;:22;;1268:72;;;1326:1;1310:19;;;;1268:72;1406:9;1425;1444:7;1690:4;1679:9;1675:20;1669:27;1664:32;;1735:4;1724:9;1720:20;1714:27;1709:32;;1788:4;1777:9;1773:20;1767:27;1764:1;1759:36;1754:41;;2706:66;2701:1;2693:10;;:79;2689:127;;;2803:1;2788:17;;;;;;;2689:127;2835:2;2830:1;:7;;;;:18;;;;;2846:2;2841:1;:7;;;;2830:18;2826:66;;;2879:1;2864:17;;;;;;;2826:66;2993:24;3003:4;3009:1;3012;3015;2993:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2986:31;;;;;;;1133:1891;;;;;;;;:::o;2576:329:41:-;2700:7;2715:43;2761:28;2774:5;2781:7;2761:12;:28;;:::i;:::-;2715:74;;2800:28;2821:5;2800:28;;;;;;;;;;;;;;;;;;;;;;2834:5;:16;;;2851:6;2859;2867:5;2834:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2894:5;2879:21;;;;;2576:329;;;;;;;;;:::o;3388:144::-;3461:7;3510:5;3517:7;3493:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3483:43;;;;;;3476:50;;;;3388:144;;;;;:::o;2909:475::-;2981:37;3026:20;3052:17;3072:56;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;3052:76;;3134:12;3149:24;3158:5;3165:7;3149:8;:24;;:::i;:::-;3134:39;;3246:4;3239;3233:11;3226:4;3220;3216:15;3213:1;3205:46;3197:54;;3280:4;3268:17;3261:25;3258:2;;;3307:1;3304;3297:12;3258:2;3374:4;3329:50;;;;;;;2909:475;;;;;;;;:::o;-1:-1:-1:-;;;;;;;;:::o",
  "abi": [
    {
      "inputs": [],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "proxy",
          "type": "address"
        }
      ],
      "name": "ProxyCreated",
      "type": "event"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_salt",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "_logic",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_admin",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "_data",
          "type": "bytes"
        }
      ],
      "name": "deploy",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_logic",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "_data",
          "type": "bytes"
        }
      ],
      "name": "deployMinimal",
      "outputs": [
        {
          "internalType": "address",
          "name": "proxy",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_salt",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "_logic",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_admin",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "_data",
          "type": "bytes"
        },
        {
          "internalType": "bytes",
          "name": "_signature",
          "type": "bytes"
        }
      ],
      "name": "deploySigned",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_salt",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "_sender",
          "type": "address"
        }
      ],
      "name": "getDeploymentAddress",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_salt",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "_logic",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_admin",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "_data",
          "type": "bytes"
        },
        {
          "internalType": "bytes",
          "name": "_signature",
          "type": "bytes"
        }
      ],
      "name": "getSigner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "ast": {
    "absolutePath": "contracts/upgradeability/ProxyFactory.sol",
    "exportedSymbols": {
      "ProxyFactory": [
        6700
      ]
    },
    "id": 6701,
    "license": "MIT",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 6390,
        "literals": [
          "solidity",
          "^",
          "0.6",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:41"
      },
      {
        "absolutePath": "contracts/upgradeability/InitializableAdminUpgradeabilityProxy.sol",
        "file": "./InitializableAdminUpgradeabilityProxy.sol",
        "id": 6391,
        "nodeType": "ImportDirective",
        "scope": 6701,
        "sourceUnit": 6144,
        "src": "57:53:41",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "contracts/cryptography/ECDSA.sol",
        "file": "../cryptography/ECDSA.sol",
        "id": 6392,
        "nodeType": "ImportDirective",
        "scope": 6701,
        "sourceUnit": 938,
        "src": "111:35:41",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [],
        "contractDependencies": [
          6143
        ],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 6700,
        "linearizedBaseContracts": [
          6700
        ],
        "name": "ProxyFactory",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "anonymous": false,
            "documentation": null,
            "id": 6396,
            "name": "ProxyCreated",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 6395,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6394,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "proxy",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6396,
                  "src": "196:13:41",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6393,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "196:7:41",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "195:15:41"
            },
            "src": "177:34:41"
          },
          {
            "constant": false,
            "id": 6398,
            "mutability": "mutable",
            "name": "contractCodeHash",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 6700,
            "src": "215:32:41",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 6397,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "215:7:41",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": null,
            "visibility": "private"
          },
          {
            "body": {
              "id": 6410,
              "nodeType": "Block",
              "src": "273:109:41",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 6408,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 6401,
                      "name": "contractCodeHash",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6398,
                      "src": "279:16:41",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 6404,
                                "name": "InitializableAdminUpgradeabilityProxy",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6143,
                                "src": "320:37:41",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_InitializableAdminUpgradeabilityProxy_$6143_$",
                                  "typeString": "type(contract InitializableAdminUpgradeabilityProxy)"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_type$_t_contract$_InitializableAdminUpgradeabilityProxy_$6143_$",
                                  "typeString": "type(contract InitializableAdminUpgradeabilityProxy)"
                                }
                              ],
                              "id": 6403,
                              "name": "type",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -27,
                              "src": "315:4:41",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                "typeString": "function () pure"
                              }
                            },
                            "id": 6405,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "315:43:41",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_meta_type_t_contract$_InitializableAdminUpgradeabilityProxy_$6143",
                              "typeString": "type(contract InitializableAdminUpgradeabilityProxy)"
                            }
                          },
                          "id": 6406,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "creationCode",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "315:56:41",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        ],
                        "id": 6402,
                        "name": "keccak256",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -8,
                        "src": "298:9:41",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                          "typeString": "function (bytes memory) pure returns (bytes32)"
                        }
                      },
                      "id": 6407,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "298:79:41",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "279:98:41",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 6409,
                  "nodeType": "ExpressionStatement",
                  "src": "279:98:41"
                }
              ]
            },
            "documentation": null,
            "id": 6411,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 6399,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "263:2:41"
            },
            "returnParameters": {
              "id": 6400,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "273:0:41"
            },
            "scope": 6700,
            "src": "252:130:41",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 6452,
              "nodeType": "Block",
              "src": "476:656:41",
              "statements": [
                {
                  "assignments": [
                    6421
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 6421,
                      "mutability": "mutable",
                      "name": "targetBytes",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 6452,
                      "src": "620:19:41",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes20",
                        "typeString": "bytes20"
                      },
                      "typeName": {
                        "id": 6420,
                        "name": "bytes20",
                        "nodeType": "ElementaryTypeName",
                        "src": "620:7:41",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes20",
                          "typeString": "bytes20"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 6426,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 6424,
                        "name": "_logic",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6413,
                        "src": "650:6:41",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 6423,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "642:7:41",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_bytes20_$",
                        "typeString": "type(bytes20)"
                      },
                      "typeName": {
                        "id": 6422,
                        "name": "bytes20",
                        "nodeType": "ElementaryTypeName",
                        "src": "642:7:41",
                        "typeDescriptions": {
                          "typeIdentifier": null,
                          "typeString": null
                        }
                      }
                    },
                    "id": 6425,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "642:15:41",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes20",
                      "typeString": "bytes20"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "620:37:41"
                },
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "672:307:41",
                    "statements": [
                      {
                        "nodeType": "YulVariableDeclaration",
                        "src": "680:24:41",
                        "value": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "699:4:41",
                              "type": "",
                              "value": "0x40"
                            }
                          ],
                          "functionName": {
                            "name": "mload",
                            "nodeType": "YulIdentifier",
                            "src": "693:5:41"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "693:11:41"
                        },
                        "variables": [
                          {
                            "name": "clone",
                            "nodeType": "YulTypedName",
                            "src": "684:5:41",
                            "type": ""
                          }
                        ]
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "name": "clone",
                              "nodeType": "YulIdentifier",
                              "src": "718:5:41"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "725:66:41",
                              "type": "",
                              "value": "0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "711:6:41"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "711:81:41"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "711:81:41"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "clone",
                                  "nodeType": "YulIdentifier",
                                  "src": "810:5:41"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "817:4:41",
                                  "type": "",
                                  "value": "0x14"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "806:3:41"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "806:16:41"
                            },
                            {
                              "name": "targetBytes",
                              "nodeType": "YulIdentifier",
                              "src": "824:11:41"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "799:6:41"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "799:37:41"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "799:37:41"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "clone",
                                  "nodeType": "YulIdentifier",
                                  "src": "854:5:41"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "861:4:41",
                                  "type": "",
                                  "value": "0x28"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "850:3:41"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "850:16:41"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "868:66:41",
                              "type": "",
                              "value": "0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "843:6:41"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "843:92:41"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "843:92:41"
                      },
                      {
                        "nodeType": "YulAssignment",
                        "src": "942:31:41",
                        "value": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "958:1:41",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "name": "clone",
                              "nodeType": "YulIdentifier",
                              "src": "961:5:41"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "968:4:41",
                              "type": "",
                              "value": "0x37"
                            }
                          ],
                          "functionName": {
                            "name": "create",
                            "nodeType": "YulIdentifier",
                            "src": "951:6:41"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "951:22:41"
                        },
                        "variableNames": [
                          {
                            "name": "proxy",
                            "nodeType": "YulIdentifier",
                            "src": "942:5:41"
                          }
                        ]
                      }
                    ]
                  },
                  "evmVersion": "constantinople",
                  "externalReferences": [
                    {
                      "declaration": 6418,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "942:5:41",
                      "valueSize": 1
                    },
                    {
                      "declaration": 6421,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "824:11:41",
                      "valueSize": 1
                    }
                  ],
                  "id": 6427,
                  "nodeType": "InlineAssembly",
                  "src": "663:316:41"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 6431,
                            "name": "proxy",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6418,
                            "src": "1015:5:41",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 6430,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "1007:7:41",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 6429,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "1007:7:41",
                            "typeDescriptions": {
                              "typeIdentifier": null,
                              "typeString": null
                            }
                          }
                        },
                        "id": 6432,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1007:14:41",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 6428,
                      "name": "ProxyCreated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6396,
                      "src": "994:12:41",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 6433,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "994:28:41",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6434,
                  "nodeType": "EmitStatement",
                  "src": "989:33:41"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 6438,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 6435,
                        "name": "_data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6415,
                        "src": "1032:5:41",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      "id": 6436,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "1032:12:41",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 6437,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "1047:1:41",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "1032:16:41",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 6451,
                  "nodeType": "IfStatement",
                  "src": "1029:95:41",
                  "trueBody": {
                    "id": 6450,
                    "nodeType": "Block",
                    "src": "1050:74:41",
                    "statements": [
                      {
                        "assignments": [
                          6440,
                          null
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 6440,
                            "mutability": "mutable",
                            "name": "success",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 6450,
                            "src": "1059:12:41",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 6439,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "1059:4:41",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          },
                          null
                        ],
                        "id": 6445,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 6443,
                              "name": "_data",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6415,
                              "src": "1087:5:41",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 6441,
                              "name": "proxy",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6418,
                              "src": "1076:5:41",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "id": 6442,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "call",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "1076:10:41",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                              "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                            }
                          },
                          "id": 6444,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1076:17:41",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                            "typeString": "tuple(bool,bytes memory)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "1058:35:41"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 6447,
                              "name": "success",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6440,
                              "src": "1109:7:41",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 6446,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "1101:7:41",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                              "typeString": "function (bool) pure"
                            }
                          },
                          "id": 6448,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1101:16:41",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6449,
                        "nodeType": "ExpressionStatement",
                        "src": "1101:16:41"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": null,
            "functionSelector": "b3eeb5e2",
            "id": 6453,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "deployMinimal",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 6416,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6413,
                  "mutability": "mutable",
                  "name": "_logic",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6453,
                  "src": "409:14:41",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6412,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "409:7:41",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6415,
                  "mutability": "mutable",
                  "name": "_data",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6453,
                  "src": "425:18:41",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 6414,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "425:5:41",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "408:36:41"
            },
            "returnParameters": {
              "id": 6419,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6418,
                  "mutability": "mutable",
                  "name": "proxy",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6453,
                  "src": "461:13:41",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6417,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "461:7:41",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "460:15:41"
            },
            "scope": 6700,
            "src": "386:746:41",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 6475,
              "nodeType": "Block",
              "src": "1244:72:41",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 6467,
                        "name": "_salt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6455,
                        "src": "1270:5:41",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6468,
                        "name": "_logic",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6457,
                        "src": "1277:6:41",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6469,
                        "name": "_admin",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6459,
                        "src": "1285:6:41",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6470,
                        "name": "_data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6461,
                        "src": "1293:5:41",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 6471,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "1300:3:41",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 6472,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "1300:10:41",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 6466,
                      "name": "_deployProxy",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6649,
                      "src": "1257:12:41",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_address_$_t_address_$_t_bytes_memory_ptr_$_t_address_$returns$_t_address_$",
                        "typeString": "function (uint256,address,address,bytes memory,address) returns (address)"
                      }
                    },
                    "id": 6473,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1257:54:41",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 6465,
                  "id": 6474,
                  "nodeType": "Return",
                  "src": "1250:61:41"
                }
              ]
            },
            "documentation": null,
            "functionSelector": "6150864c",
            "id": 6476,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "deploy",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 6462,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6455,
                  "mutability": "mutable",
                  "name": "_salt",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6476,
                  "src": "1152:13:41",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6454,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1152:7:41",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6457,
                  "mutability": "mutable",
                  "name": "_logic",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6476,
                  "src": "1167:14:41",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6456,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1167:7:41",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6459,
                  "mutability": "mutable",
                  "name": "_admin",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6476,
                  "src": "1183:14:41",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6458,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1183:7:41",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6461,
                  "mutability": "mutable",
                  "name": "_data",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6476,
                  "src": "1199:18:41",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 6460,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "1199:5:41",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1151:67:41"
            },
            "returnParameters": {
              "id": 6465,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6464,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6476,
                  "src": "1235:7:41",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6463,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1235:7:41",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1234:9:41"
            },
            "scope": 6700,
            "src": "1136:180:41",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 6519,
              "nodeType": "Block",
              "src": "1459:198:41",
              "statements": [
                {
                  "assignments": [
                    6492
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 6492,
                      "mutability": "mutable",
                      "name": "signer",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 6519,
                      "src": "1465:14:41",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 6491,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "1465:7:41",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 6500,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 6494,
                        "name": "_salt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6478,
                        "src": "1492:5:41",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6495,
                        "name": "_logic",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6480,
                        "src": "1499:6:41",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6496,
                        "name": "_admin",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6482,
                        "src": "1507:6:41",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6497,
                        "name": "_data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6484,
                        "src": "1515:5:41",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6498,
                        "name": "_signature",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6486,
                        "src": "1522:10:41",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 6493,
                      "name": "getSigner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6606,
                      "src": "1482:9:41",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_uint256_$_t_address_$_t_address_$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_address_$",
                        "typeString": "function (uint256,address,address,bytes memory,bytes memory) view returns (address)"
                      }
                    },
                    "id": 6499,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1482:51:41",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1465:68:41"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 6507,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 6502,
                          "name": "signer",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6492,
                          "src": "1547:6:41",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 6505,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1565:1:41",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 6504,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "1557:7:41",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 6503,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "1557:7:41",
                              "typeDescriptions": {
                                "typeIdentifier": null,
                                "typeString": null
                              }
                            }
                          },
                          "id": 6506,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1557:10:41",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "1547:20:41",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "496e76616c6964207369676e6174757265",
                        "id": 6508,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1569:19:41",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_4f2d7dfcb27c0aafa13ae8c400de482c7832204d194018b6e45bd2bf244c74e7",
                          "typeString": "literal_string \"Invalid signature\""
                        },
                        "value": "Invalid signature"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_4f2d7dfcb27c0aafa13ae8c400de482c7832204d194018b6e45bd2bf244c74e7",
                          "typeString": "literal_string \"Invalid signature\""
                        }
                      ],
                      "id": 6501,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "1539:7:41",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 6509,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1539:50:41",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6510,
                  "nodeType": "ExpressionStatement",
                  "src": "1539:50:41"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 6512,
                        "name": "_salt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6478,
                        "src": "1615:5:41",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6513,
                        "name": "_logic",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6480,
                        "src": "1622:6:41",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6514,
                        "name": "_admin",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6482,
                        "src": "1630:6:41",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6515,
                        "name": "_data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6484,
                        "src": "1638:5:41",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6516,
                        "name": "signer",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6492,
                        "src": "1645:6:41",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 6511,
                      "name": "_deployProxy",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6649,
                      "src": "1602:12:41",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_address_$_t_address_$_t_bytes_memory_ptr_$_t_address_$returns$_t_address_$",
                        "typeString": "function (uint256,address,address,bytes memory,address) returns (address)"
                      }
                    },
                    "id": 6517,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1602:50:41",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 6490,
                  "id": 6518,
                  "nodeType": "Return",
                  "src": "1595:57:41"
                }
              ]
            },
            "documentation": null,
            "functionSelector": "332d6626",
            "id": 6520,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "deploySigned",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 6487,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6478,
                  "mutability": "mutable",
                  "name": "_salt",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6520,
                  "src": "1342:13:41",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6477,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1342:7:41",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6480,
                  "mutability": "mutable",
                  "name": "_logic",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6520,
                  "src": "1357:14:41",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6479,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1357:7:41",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6482,
                  "mutability": "mutable",
                  "name": "_admin",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6520,
                  "src": "1373:14:41",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6481,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1373:7:41",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6484,
                  "mutability": "mutable",
                  "name": "_data",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6520,
                  "src": "1389:18:41",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 6483,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "1389:5:41",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6486,
                  "mutability": "mutable",
                  "name": "_signature",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6520,
                  "src": "1409:23:41",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 6485,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "1409:5:41",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1341:92:41"
            },
            "returnParameters": {
              "id": 6490,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6489,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6520,
                  "src": "1450:7:41",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6488,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1450:7:41",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1449:9:41"
            },
            "scope": 6700,
            "src": "1320:337:41",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 6564,
              "nodeType": "Block",
              "src": "1753:407:41",
              "statements": [
                {
                  "assignments": [
                    6530
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 6530,
                      "mutability": "mutable",
                      "name": "salt",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 6564,
                      "src": "1909:12:41",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 6529,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "1909:7:41",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 6535,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 6532,
                        "name": "_salt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6522,
                        "src": "1933:5:41",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6533,
                        "name": "_sender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6524,
                        "src": "1940:7:41",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 6531,
                      "name": "_getSalt",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6699,
                      "src": "1924:8:41",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_address_$returns$_t_bytes32_$",
                        "typeString": "function (uint256,address) pure returns (bytes32)"
                      }
                    },
                    "id": 6534,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1924:24:41",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1909:39:41"
                },
                {
                  "assignments": [
                    6537
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 6537,
                      "mutability": "mutable",
                      "name": "rawAddress",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 6564,
                      "src": "1954:18:41",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 6536,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "1954:7:41",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 6553,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "30786666",
                                "id": 6543,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "2025:4:41",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_255_by_1",
                                  "typeString": "int_const 255"
                                },
                                "value": "0xff"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_255_by_1",
                                  "typeString": "int_const 255"
                                }
                              ],
                              "id": 6542,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "2018:6:41",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_bytes1_$",
                                "typeString": "type(bytes1)"
                              },
                              "typeName": {
                                "id": 6541,
                                "name": "bytes1",
                                "nodeType": "ElementaryTypeName",
                                "src": "2018:6:41",
                                "typeDescriptions": {
                                  "typeIdentifier": null,
                                  "typeString": null
                                }
                              }
                            },
                            "id": 6544,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2018:12:41",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes1",
                              "typeString": "bytes1"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 6547,
                                "name": "this",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -28,
                                "src": "2048:4:41",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_ProxyFactory_$6700",
                                  "typeString": "contract ProxyFactory"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_ProxyFactory_$6700",
                                  "typeString": "contract ProxyFactory"
                                }
                              ],
                              "id": 6546,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "2040:7:41",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 6545,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "2040:7:41",
                                "typeDescriptions": {
                                  "typeIdentifier": null,
                                  "typeString": null
                                }
                              }
                            },
                            "id": 6548,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2040:13:41",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 6549,
                            "name": "salt",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6530,
                            "src": "2063:4:41",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 6550,
                            "name": "contractCodeHash",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6398,
                            "src": "2077:16:41",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes1",
                              "typeString": "bytes1"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 6539,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -1,
                            "src": "1992:3:41",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 6540,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodePacked",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "1992:16:41",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function () pure returns (bytes memory)"
                          }
                        },
                        "id": 6551,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1992:109:41",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 6538,
                      "name": "keccak256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": -8,
                      "src": "1975:9:41",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (bytes memory) pure returns (bytes32)"
                      }
                    },
                    "id": 6552,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1975:132:41",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1954:153:41"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            "id": 6560,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "id": 6558,
                              "name": "rawAddress",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6537,
                              "src": "2137:10:41",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "<<",
                            "rightExpression": {
                              "argumentTypes": null,
                              "hexValue": "3936",
                              "id": 6559,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2151:2:41",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_96_by_1",
                                "typeString": "int_const 96"
                              },
                              "value": "96"
                            },
                            "src": "2137:16:41",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "id": 6557,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "2129:7:41",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_bytes20_$",
                            "typeString": "type(bytes20)"
                          },
                          "typeName": {
                            "id": 6556,
                            "name": "bytes20",
                            "nodeType": "ElementaryTypeName",
                            "src": "2129:7:41",
                            "typeDescriptions": {
                              "typeIdentifier": null,
                              "typeString": null
                            }
                          }
                        },
                        "id": 6561,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2129:25:41",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes20",
                          "typeString": "bytes20"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes20",
                          "typeString": "bytes20"
                        }
                      ],
                      "id": 6555,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "2121:7:41",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": {
                        "id": 6554,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "2121:7:41",
                        "typeDescriptions": {
                          "typeIdentifier": null,
                          "typeString": null
                        }
                      }
                    },
                    "id": 6562,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2121:34:41",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "functionReturnParameters": 6528,
                  "id": 6563,
                  "nodeType": "Return",
                  "src": "2114:41:41"
                }
              ]
            },
            "documentation": null,
            "functionSelector": "81ae1f5b",
            "id": 6565,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getDeploymentAddress",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 6525,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6522,
                  "mutability": "mutable",
                  "name": "_salt",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6565,
                  "src": "1691:13:41",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6521,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1691:7:41",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6524,
                  "mutability": "mutable",
                  "name": "_sender",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6565,
                  "src": "1706:15:41",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6523,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1706:7:41",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1690:32:41"
            },
            "returnParameters": {
              "id": 6528,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6527,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6565,
                  "src": "1744:7:41",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6526,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1744:7:41",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1743:9:41"
            },
            "scope": 6700,
            "src": "1661:499:41",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 6605,
              "nodeType": "Block",
              "src": "2305:267:41",
              "statements": [
                {
                  "assignments": [
                    6581
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 6581,
                      "mutability": "mutable",
                      "name": "msgHash",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 6605,
                      "src": "2311:15:41",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 6580,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "2311:7:41",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 6598,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 6587,
                                "name": "_salt",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6567,
                                "src": "2432:5:41",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 6588,
                                "name": "_logic",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6569,
                                "src": "2439:6:41",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 6589,
                                "name": "_admin",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6571,
                                "src": "2447:6:41",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 6590,
                                "name": "_data",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6573,
                                "src": "2455:5:41",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 6593,
                                    "name": "this",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": -28,
                                    "src": "2470:4:41",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_ProxyFactory_$6700",
                                      "typeString": "contract ProxyFactory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_contract$_ProxyFactory_$6700",
                                      "typeString": "contract ProxyFactory"
                                    }
                                  ],
                                  "id": 6592,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "2462:7:41",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": {
                                    "id": 6591,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "2462:7:41",
                                    "typeDescriptions": {
                                      "typeIdentifier": null,
                                      "typeString": null
                                    }
                                  }
                                },
                                "id": 6594,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2462:13:41",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 6585,
                                "name": "abi",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -1,
                                "src": "2404:3:41",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_abi",
                                  "typeString": "abi"
                                }
                              },
                              "id": 6586,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "encodePacked",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "2404:16:41",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                "typeString": "function () pure returns (bytes memory)"
                              }
                            },
                            "id": 6595,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2404:81:41",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          ],
                          "id": 6584,
                          "name": "keccak256",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -8,
                          "src": "2385:9:41",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                            "typeString": "function (bytes memory) pure returns (bytes32)"
                          }
                        },
                        "id": 6596,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2385:108:41",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 6582,
                        "name": "OpenZeppelinUpgradesECDSA",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 937,
                        "src": "2329:25:41",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_OpenZeppelinUpgradesECDSA_$937_$",
                          "typeString": "type(library OpenZeppelinUpgradesECDSA)"
                        }
                      },
                      "id": 6583,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "toEthSignedMessageHash",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 936,
                      "src": "2329:48:41",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes32_$returns$_t_bytes32_$",
                        "typeString": "function (bytes32) pure returns (bytes32)"
                      }
                    },
                    "id": 6597,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2329:170:41",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2311:188:41"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 6601,
                        "name": "msgHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6581,
                        "src": "2547:7:41",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6602,
                        "name": "_signature",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6575,
                        "src": "2556:10:41",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 6599,
                        "name": "OpenZeppelinUpgradesECDSA",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 937,
                        "src": "2513:25:41",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_OpenZeppelinUpgradesECDSA_$937_$",
                          "typeString": "type(library OpenZeppelinUpgradesECDSA)"
                        }
                      },
                      "id": 6600,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "recover",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 919,
                      "src": "2513:33:41",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_address_$",
                        "typeString": "function (bytes32,bytes memory) pure returns (address)"
                      }
                    },
                    "id": 6603,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2513:54:41",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 6579,
                  "id": 6604,
                  "nodeType": "Return",
                  "src": "2506:61:41"
                }
              ]
            },
            "documentation": null,
            "functionSelector": "290f8f56",
            "id": 6606,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getSigner",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 6576,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6567,
                  "mutability": "mutable",
                  "name": "_salt",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6606,
                  "src": "2183:13:41",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6566,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2183:7:41",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6569,
                  "mutability": "mutable",
                  "name": "_logic",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6606,
                  "src": "2198:14:41",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6568,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2198:7:41",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6571,
                  "mutability": "mutable",
                  "name": "_admin",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6606,
                  "src": "2214:14:41",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6570,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2214:7:41",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6573,
                  "mutability": "mutable",
                  "name": "_data",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6606,
                  "src": "2230:18:41",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 6572,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "2230:5:41",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6575,
                  "mutability": "mutable",
                  "name": "_signature",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6606,
                  "src": "2250:23:41",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 6574,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "2250:5:41",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2182:92:41"
            },
            "returnParameters": {
              "id": 6579,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6578,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6606,
                  "src": "2296:7:41",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6577,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2296:7:41",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2295:9:41"
            },
            "scope": 6700,
            "src": "2164:408:41",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 6648,
              "nodeType": "Block",
              "src": "2709:196:41",
              "statements": [
                {
                  "assignments": [
                    6622
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 6622,
                      "mutability": "mutable",
                      "name": "proxy",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 6648,
                      "src": "2715:43:41",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_InitializableAdminUpgradeabilityProxy_$6143",
                        "typeString": "contract InitializableAdminUpgradeabilityProxy"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 6621,
                        "name": "InitializableAdminUpgradeabilityProxy",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 6143,
                        "src": "2715:37:41",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_InitializableAdminUpgradeabilityProxy_$6143",
                          "typeString": "contract InitializableAdminUpgradeabilityProxy"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 6627,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 6624,
                        "name": "_salt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6608,
                        "src": "2774:5:41",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6625,
                        "name": "_sender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6616,
                        "src": "2781:7:41",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 6623,
                      "name": "_createProxy",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6681,
                      "src": "2761:12:41",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_address_$returns$_t_contract$_InitializableAdminUpgradeabilityProxy_$6143_$",
                        "typeString": "function (uint256,address) returns (contract InitializableAdminUpgradeabilityProxy)"
                      }
                    },
                    "id": 6626,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2761:28:41",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_InitializableAdminUpgradeabilityProxy_$6143",
                      "typeString": "contract InitializableAdminUpgradeabilityProxy"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2715:74:41"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 6631,
                            "name": "proxy",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6622,
                            "src": "2821:5:41",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_InitializableAdminUpgradeabilityProxy_$6143",
                              "typeString": "contract InitializableAdminUpgradeabilityProxy"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_InitializableAdminUpgradeabilityProxy_$6143",
                              "typeString": "contract InitializableAdminUpgradeabilityProxy"
                            }
                          ],
                          "id": 6630,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "2813:7:41",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 6629,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "2813:7:41",
                            "typeDescriptions": {
                              "typeIdentifier": null,
                              "typeString": null
                            }
                          }
                        },
                        "id": 6632,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2813:14:41",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 6628,
                      "name": "ProxyCreated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6396,
                      "src": "2800:12:41",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 6633,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2800:28:41",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6634,
                  "nodeType": "EmitStatement",
                  "src": "2795:33:41"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 6638,
                        "name": "_logic",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6610,
                        "src": "2851:6:41",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6639,
                        "name": "_admin",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6612,
                        "src": "2859:6:41",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6640,
                        "name": "_data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6614,
                        "src": "2867:5:41",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 6635,
                        "name": "proxy",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6622,
                        "src": "2834:5:41",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_InitializableAdminUpgradeabilityProxy_$6143",
                          "typeString": "contract InitializableAdminUpgradeabilityProxy"
                        }
                      },
                      "id": 6637,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "initialize",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6121,
                      "src": "2834:16:41",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_payable$_t_address_$_t_address_$_t_bytes_memory_ptr_$returns$__$",
                        "typeString": "function (address,address,bytes memory) payable external"
                      }
                    },
                    "id": 6641,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2834:39:41",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6642,
                  "nodeType": "ExpressionStatement",
                  "src": "2834:39:41"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 6645,
                        "name": "proxy",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6622,
                        "src": "2894:5:41",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_InitializableAdminUpgradeabilityProxy_$6143",
                          "typeString": "contract InitializableAdminUpgradeabilityProxy"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_InitializableAdminUpgradeabilityProxy_$6143",
                          "typeString": "contract InitializableAdminUpgradeabilityProxy"
                        }
                      ],
                      "id": 6644,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "2886:7:41",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": {
                        "id": 6643,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "2886:7:41",
                        "typeDescriptions": {
                          "typeIdentifier": null,
                          "typeString": null
                        }
                      }
                    },
                    "id": 6646,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2886:14:41",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "functionReturnParameters": 6620,
                  "id": 6647,
                  "nodeType": "Return",
                  "src": "2879:21:41"
                }
              ]
            },
            "documentation": null,
            "id": 6649,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_deployProxy",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 6617,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6608,
                  "mutability": "mutable",
                  "name": "_salt",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6649,
                  "src": "2598:13:41",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6607,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2598:7:41",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6610,
                  "mutability": "mutable",
                  "name": "_logic",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6649,
                  "src": "2613:14:41",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6609,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2613:7:41",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6612,
                  "mutability": "mutable",
                  "name": "_admin",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6649,
                  "src": "2629:14:41",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6611,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2629:7:41",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6614,
                  "mutability": "mutable",
                  "name": "_data",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6649,
                  "src": "2645:18:41",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 6613,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "2645:5:41",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6616,
                  "mutability": "mutable",
                  "name": "_sender",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6649,
                  "src": "2665:15:41",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6615,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2665:7:41",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2597:84:41"
            },
            "returnParameters": {
              "id": 6620,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6619,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6649,
                  "src": "2700:7:41",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6618,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2700:7:41",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2699:9:41"
            },
            "scope": 6700,
            "src": "2576:329:41",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 6680,
              "nodeType": "Block",
              "src": "3020:364:41",
              "statements": [
                {
                  "assignments": [
                    6659
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 6659,
                      "mutability": "mutable",
                      "name": "addr",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 6680,
                      "src": "3026:20:41",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      },
                      "typeName": {
                        "id": 6658,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "3026:15:41",
                        "stateMutability": "payable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 6660,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3026:20:41"
                },
                {
                  "assignments": [
                    6662
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 6662,
                      "mutability": "mutable",
                      "name": "code",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 6680,
                      "src": "3052:17:41",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 6661,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "3052:5:41",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 6667,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 6664,
                          "name": "InitializableAdminUpgradeabilityProxy",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6143,
                          "src": "3077:37:41",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_InitializableAdminUpgradeabilityProxy_$6143_$",
                            "typeString": "type(contract InitializableAdminUpgradeabilityProxy)"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_type$_t_contract$_InitializableAdminUpgradeabilityProxy_$6143_$",
                            "typeString": "type(contract InitializableAdminUpgradeabilityProxy)"
                          }
                        ],
                        "id": 6663,
                        "name": "type",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -27,
                        "src": "3072:4:41",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 6665,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "3072:43:41",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_magic_meta_type_t_contract$_InitializableAdminUpgradeabilityProxy_$6143",
                        "typeString": "type(contract InitializableAdminUpgradeabilityProxy)"
                      }
                    },
                    "id": 6666,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "memberName": "creationCode",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": null,
                    "src": "3072:56:41",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3052:76:41"
                },
                {
                  "assignments": [
                    6669
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 6669,
                      "mutability": "mutable",
                      "name": "salt",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 6680,
                      "src": "3134:12:41",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 6668,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "3134:7:41",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 6674,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 6671,
                        "name": "_salt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6651,
                        "src": "3158:5:41",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6672,
                        "name": "_sender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6653,
                        "src": "3165:7:41",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 6670,
                      "name": "_getSalt",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6699,
                      "src": "3149:8:41",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_address_$returns$_t_bytes32_$",
                        "typeString": "function (uint256,address) pure returns (bytes32)"
                      }
                    },
                    "id": 6673,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3149:24:41",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3134:39:41"
                },
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "3189:134:41",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "3197:54:41",
                        "value": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "3213:1:41",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "arguments": [
                                {
                                  "name": "code",
                                  "nodeType": "YulIdentifier",
                                  "src": "3220:4:41"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "3226:4:41",
                                  "type": "",
                                  "value": "0x20"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "3216:3:41"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "3216:15:41"
                            },
                            {
                              "arguments": [
                                {
                                  "name": "code",
                                  "nodeType": "YulIdentifier",
                                  "src": "3239:4:41"
                                }
                              ],
                              "functionName": {
                                "name": "mload",
                                "nodeType": "YulIdentifier",
                                "src": "3233:5:41"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "3233:11:41"
                            },
                            {
                              "name": "salt",
                              "nodeType": "YulIdentifier",
                              "src": "3246:4:41"
                            }
                          ],
                          "functionName": {
                            "name": "create2",
                            "nodeType": "YulIdentifier",
                            "src": "3205:7:41"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "3205:46:41"
                        },
                        "variableNames": [
                          {
                            "name": "addr",
                            "nodeType": "YulIdentifier",
                            "src": "3197:4:41"
                          }
                        ]
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "3287:30:41",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3304:1:41",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3307:1:41",
                                    "type": "",
                                    "value": "0"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "3297:6:41"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3297:12:41"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3297:12:41"
                            }
                          ]
                        },
                        "condition": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "addr",
                                  "nodeType": "YulIdentifier",
                                  "src": "3280:4:41"
                                }
                              ],
                              "functionName": {
                                "name": "extcodesize",
                                "nodeType": "YulIdentifier",
                                "src": "3268:11:41"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "3268:17:41"
                            }
                          ],
                          "functionName": {
                            "name": "iszero",
                            "nodeType": "YulIdentifier",
                            "src": "3261:6:41"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "3261:25:41"
                        },
                        "nodeType": "YulIf",
                        "src": "3258:2:41"
                      }
                    ]
                  },
                  "evmVersion": "constantinople",
                  "externalReferences": [
                    {
                      "declaration": 6659,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "3197:4:41",
                      "valueSize": 1
                    },
                    {
                      "declaration": 6659,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "3280:4:41",
                      "valueSize": 1
                    },
                    {
                      "declaration": 6662,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "3220:4:41",
                      "valueSize": 1
                    },
                    {
                      "declaration": 6662,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "3239:4:41",
                      "valueSize": 1
                    },
                    {
                      "declaration": 6669,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "3246:4:41",
                      "valueSize": 1
                    }
                  ],
                  "id": 6675,
                  "nodeType": "InlineAssembly",
                  "src": "3180:143:41"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 6677,
                        "name": "addr",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6659,
                        "src": "3374:4:41",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 6676,
                      "name": "InitializableAdminUpgradeabilityProxy",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6143,
                      "src": "3336:37:41",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_InitializableAdminUpgradeabilityProxy_$6143_$",
                        "typeString": "type(contract InitializableAdminUpgradeabilityProxy)"
                      }
                    },
                    "id": 6678,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3336:43:41",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_InitializableAdminUpgradeabilityProxy_$6143",
                      "typeString": "contract InitializableAdminUpgradeabilityProxy"
                    }
                  },
                  "functionReturnParameters": 6657,
                  "id": 6679,
                  "nodeType": "Return",
                  "src": "3329:50:41"
                }
              ]
            },
            "documentation": null,
            "id": 6681,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_createProxy",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 6654,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6651,
                  "mutability": "mutable",
                  "name": "_salt",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6681,
                  "src": "2931:13:41",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6650,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2931:7:41",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6653,
                  "mutability": "mutable",
                  "name": "_sender",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6681,
                  "src": "2946:15:41",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6652,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2946:7:41",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2930:32:41"
            },
            "returnParameters": {
              "id": 6657,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6656,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6681,
                  "src": "2981:37:41",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_InitializableAdminUpgradeabilityProxy_$6143",
                    "typeString": "contract InitializableAdminUpgradeabilityProxy"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 6655,
                    "name": "InitializableAdminUpgradeabilityProxy",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 6143,
                    "src": "2981:37:41",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_InitializableAdminUpgradeabilityProxy_$6143",
                      "typeString": "contract InitializableAdminUpgradeabilityProxy"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2980:39:41"
            },
            "scope": 6700,
            "src": "2909:475:41",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 6698,
              "nodeType": "Block",
              "src": "3470:62:41",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 6693,
                            "name": "_salt",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6683,
                            "src": "3510:5:41",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 6694,
                            "name": "_sender",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6685,
                            "src": "3517:7:41",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 6691,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -1,
                            "src": "3493:3:41",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 6692,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodePacked",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "3493:16:41",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function () pure returns (bytes memory)"
                          }
                        },
                        "id": 6695,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3493:32:41",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 6690,
                      "name": "keccak256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": -8,
                      "src": "3483:9:41",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (bytes memory) pure returns (bytes32)"
                      }
                    },
                    "id": 6696,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3483:43:41",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 6689,
                  "id": 6697,
                  "nodeType": "Return",
                  "src": "3476:50:41"
                }
              ]
            },
            "documentation": null,
            "id": 6699,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_getSalt",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 6686,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6683,
                  "mutability": "mutable",
                  "name": "_salt",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6699,
                  "src": "3406:13:41",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6682,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3406:7:41",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6685,
                  "mutability": "mutable",
                  "name": "_sender",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6699,
                  "src": "3421:15:41",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6684,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3421:7:41",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3405:32:41"
            },
            "returnParameters": {
              "id": 6689,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6688,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6699,
                  "src": "3461:7:41",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 6687,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3461:7:41",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3460:9:41"
            },
            "scope": 6700,
            "src": "3388:144:41",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          }
        ],
        "scope": 6701,
        "src": "148:3386:41"
      }
    ],
    "src": "0:3535:41"
  },
  "bytecode": "0x60806040523480156100115760006000fd5b505b6040518060200161002390610053565b6020820181038252601f19601f82011660405250805190602001206000600050819090600019169055505b610060565b610e7180611f9183390190565b611f228061006f6000396000f3fe60806040523480156100115760006000fd5b506004361061005c5760003560e01c8063290f8f5614610062578063332d66261461024d5780636150864c1461043857806381ae1f5b14610585578063b3eeb5e2146106145761005c565b60006000fd5b61020b600480360360a08110156100795760006000fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001906401000000008111156100e15760006000fd5b8201836020820111156100f45760006000fd5b803590602001918460018302840111640100000000831117156101175760006000fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509090919290909192908035906020019064010000000081111561017f5760006000fd5b8201836020820111156101925760006000fd5b803590602001918460018302840111640100000000831117156101b55760006000fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050909091929090919290505050610737565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103f6600480360360a08110156102645760006000fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001906401000000008111156102cc5760006000fd5b8201836020820111156102df5760006000fd5b803590602001918460018302840111640100000000831117156103025760006000fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509090919290909192908035906020019064010000000081111561036a5760006000fd5b82018360208201111561037d5760006000fd5b803590602001918460018302840111640100000000831117156103a05760006000fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505090909192909091929050505061088f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6105436004803603608081101561044f5760006000fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001906401000000008111156104b75760006000fd5b8201836020820111156104ca5760006000fd5b803590602001918460018302840111640100000000831117156104ed5760006000fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050909091929090919290505050610975565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6105d26004803603604081101561059c5760006000fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610999565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6106f56004803603604081101561062b5760006000fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001906401000000008111156106695760006000fd5b82018360208201111561067c5760006000fd5b8035906020019184600183028401116401000000008311171561069f5760006000fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050909091929090919290505050610a9b565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6000600061086b8787878730604051602001808681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b815260140183805190602001908083835b6020831015156107ec57805182525b6020820191506020810190506020830392506107c6565b6001836020036101000a0380198251168184511680821785525050505050509050018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014019550505050505060405160208183030381529060405280519060200120610c3e63ffffffff16565b905061087d8184610ca663ffffffff16565b91505061088656505b95945050505050565b600060006108a6878787878761073763ffffffff16565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515610950576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f496e76616c6964207369676e617475726500000000000000000000000000000081526020015060200191505060405180910390fd5b6109638787878785610dcd63ffffffff16565b91505061096c56505b95945050505050565b600061098a8585858533610dcd63ffffffff16565b9050610991565b949350505050565b600060006109ad8484610f9363ffffffff16565b9050600060ff60f81b308360006000505460405160200180857effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526001018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018360001916600019168152602001826000191660001916815260200194505050505060405160208183030381529060405280519060200120905060608160001916901b60601c92505050610a955650505b92915050565b600060008360601b90506040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528160148201527f5af43d82803e903d91602b57fd5bf3000000000000000000000000000000000060288201526037816000f09250507efffc2da0b561cae30d9826d37709e9421c4725faebc226cbbb7ef5fc5e734982604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1600083511115610c365760008273ffffffffffffffffffffffffffffffffffffffff16846040518082805190602001908083835b602083101515610bbc57805182525b602082019150602081019050602083039250610b96565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610c1e576040519150601f19603f3d011682016040523d82523d6000602084013e610c23565b606091505b50509050801515610c345760006000fd5b505b505b92915050565b60008160405160200180807f19457468657265756d205369676e6564204d6573736167653a0a333200000000815260200150601c018260001916600019168152602001915050604051602081830303815290604052805190602001209050610ca1565b919050565b600060418251141515610cbc5760009050610dc7565b6000600060006020850151925060408501519150606085015160001a90507f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08260001c1115610d115760009350505050610dc7565b601b8160ff1614158015610d295750601c8160ff1614155b15610d3a5760009350505050610dc7565b600186828585604051600081526020016040526040518085600019166000191681526020018460ff1660ff168152602001836000191660001916815260200182600019166000191681526020019450505050506020604051602081039080840390855afa158015610db0573d600060003e3d6000fd5b505050602060405103519350505050610dc7565050505b92915050565b60006000610de1878461100063ffffffff16565b90507efffc2da0b561cae30d9826d37709e9421c4725faebc226cbbb7ef5fc5e734981604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a18073ffffffffffffffffffffffffffffffffffffffff1663cf7a1d778787876040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610f185780820151818401525b602081019050610efc565b50505050905090810190601f168015610f455780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b158015610f675760006000fd5b505af1158015610f7c573d600060003e3d6000fd5b5050505080915050610f8a56505b95945050505050565b60008282604051602001808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b815260140192505050604051602081830303815290604052805190602001209050610ffa565b92915050565b600060006060604051806020016110169061106e565b6020820181038252601f19601f820116604052509050600061103e8686610f9363ffffffff16565b9050808251602084016000f59250823b151561105a5760006000fd5b829350505050611068565050505b92915050565b610e718061107c8339019056fe60806040523480156100115760006000fd5b50610017565b610e4b806100266000396000f3fe6080604052600436106100745760003560e01c80638f2839701161004e5780638f283970146101e7578063cf7a1d771461023a578063d1f578941461033d578063f851a440146104205761008b565b80633659cfe61461009d5780634f1ef286146100f05780635c60da1b1461018f5761008b565b3661008b575b61008861047863ffffffff16565b5b005b5b61009a61047863ffffffff16565b5b005b3480156100aa5760006000fd5b506100ee600480360360208110156100c25760006000fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506104a5565b005b61018d600480360360408110156101075760006000fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001906401000000008111156101455760006000fd5b8201836020820111156101585760006000fd5b8035906020019184600183028401116401000000008311171561017b5760006000fd5b9091929390909192939050505061050e565b005b34801561019c5760006000fd5b506101a56105fb565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156101f45760006000fd5b506102386004803603602081101561020c5760006000fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061066b565b005b61033b600480360360608110156102515760006000fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001906401000000008111156102af5760006000fd5b8201836020820111156102c25760006000fd5b803590602001918460018302840111640100000000831117156102e55760006000fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050909091929090919290505050610800565b005b61041e600480360360408110156103545760006000fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001906401000000008111156103925760006000fd5b8201836020820111156103a55760006000fd5b803590602001918460018302840111640100000000831117156103c85760006000fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509090919290909192905050506108e5565b005b34801561042d5760006000fd5b50610436610a8b565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610486610afb63ffffffff16565b6104a2610497610ba063ffffffff16565b610bd363ffffffff16565b5b565b6104b3610c0663ffffffff16565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156104fb576104f581610c3963ffffffff16565b5b61050a565b61050961047863ffffffff16565b5b5b50565b61051c610c0663ffffffff16565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156105e65761055e83610c3963ffffffff16565b60008373ffffffffffffffffffffffffffffffffffffffff168383604051808383808284378083019250505092505050600060405180830381855af49150503d80600081146105c9576040519150601f19603f3d011682016040523d82523d6000602084013e6105ce565b606091505b505090508015156105df5760006000fd5b505b6105f5565b6105f461047863ffffffff16565b5b5b505050565b600061060b610c0663ffffffff16565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156106585761064c610ba063ffffffff16565b9050610653565b610667565b61066661047863ffffffff16565b5b5b90565b610679610c0663ffffffff16565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156107ed57600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515610734576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526036815260200180610da56036913960400191505060405180910390fd5b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f610763610c0663ffffffff16565b82604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a16107e781610c8f63ffffffff16565b5b6107fc565b6107fb61047863ffffffff16565b5b5b50565b600073ffffffffffffffffffffffffffffffffffffffff16610826610ba063ffffffff16565b73ffffffffffffffffffffffffffffffffffffffff161415156108495760006000fd5b61085983826108e563ffffffff16565b600160405180807f656970313936372e70726f78792e61646d696e000000000000000000000000008152602001506013019050604051809103902060001c0360001b600019167fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610360001b600019161415156108d057fe5b6108df82610c8f63ffffffff16565b5b505050565b600073ffffffffffffffffffffffffffffffffffffffff1661090b610ba063ffffffff16565b73ffffffffffffffffffffffffffffffffffffffff1614151561092e5760006000fd5b600160405180807f656970313936372e70726f78792e696d706c656d656e746174696f6e00000000815260200150601c019050604051809103902060001c0360001b600019167f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b600019161415156109a557fe5b6109b482610cbf63ffffffff16565b600081511115610a865760008273ffffffffffffffffffffffffffffffffffffffff16826040518082805190602001908083835b602083101515610a0e57805182525b6020820191506020810190506020830392506109e8565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d8060008114610a6e576040519150601f19603f3d011682016040523d82523d6000602084013e610a73565b606091505b50509050801515610a845760006000fd5b505b5b5050565b6000610a9b610c0663ffffffff16565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610ae857610adc610c0663ffffffff16565b9050610ae3565b610af7565b610af661047863ffffffff16565b5b5b90565b610b09610c0663ffffffff16565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151515610b8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526032815260200180610d736032913960400191505060405180910390fd5b610b9d610d5563ffffffff16565b5b565b600060007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b905080549150505b90565b36600060003760006000366000845af43d600060003e8060008114610bfb573d6000f3610c00565b3d6000fd5b50505b50565b600060007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610360001b905080549150505b90565b610c4881610cbf63ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a25b50565b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610360001b9050818155505b50565b610cce81610d5863ffffffff16565b1515610d25576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603b815260200180610ddb603b913960400191505060405180910390fd5b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b9050818155505b50565b5b565b60006000823b905060008111915050610d6d56505b91905056fe43616e6e6f742063616c6c2066616c6c6261636b2066756e6374696f6e2066726f6d207468652070726f78792061646d696e43616e6e6f74206368616e6765207468652061646d696e206f6620612070726f787920746f20746865207a65726f206164647265737343616e6e6f742073657420612070726f787920696d706c656d656e746174696f6e20746f2061206e6f6e2d636f6e74726163742061646472657373a2646970667358221220f60be7282baa81611b9ca8e718a252521899b4a2dc2e8509cf042ef2d255048964736f6c634300060a0033a2646970667358221220b33741a10db3f29819b77a0d8a65ae482454127ceb165fc69f3e774226ad6a8f64736f6c634300060a003360806040523480156100115760006000fd5b50610017565b610e4b806100266000396000f3fe6080604052600436106100745760003560e01c80638f2839701161004e5780638f283970146101e7578063cf7a1d771461023a578063d1f578941461033d578063f851a440146104205761008b565b80633659cfe61461009d5780634f1ef286146100f05780635c60da1b1461018f5761008b565b3661008b575b61008861047863ffffffff16565b5b005b5b61009a61047863ffffffff16565b5b005b3480156100aa5760006000fd5b506100ee600480360360208110156100c25760006000fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506104a5565b005b61018d600480360360408110156101075760006000fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001906401000000008111156101455760006000fd5b8201836020820111156101585760006000fd5b8035906020019184600183028401116401000000008311171561017b5760006000fd5b9091929390909192939050505061050e565b005b34801561019c5760006000fd5b506101a56105fb565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156101f45760006000fd5b506102386004803603602081101561020c5760006000fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061066b565b005b61033b600480360360608110156102515760006000fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001906401000000008111156102af5760006000fd5b8201836020820111156102c25760006000fd5b803590602001918460018302840111640100000000831117156102e55760006000fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050909091929090919290505050610800565b005b61041e600480360360408110156103545760006000fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001906401000000008111156103925760006000fd5b8201836020820111156103a55760006000fd5b803590602001918460018302840111640100000000831117156103c85760006000fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509090919290909192905050506108e5565b005b34801561042d5760006000fd5b50610436610a8b565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610486610afb63ffffffff16565b6104a2610497610ba063ffffffff16565b610bd363ffffffff16565b5b565b6104b3610c0663ffffffff16565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156104fb576104f581610c3963ffffffff16565b5b61050a565b61050961047863ffffffff16565b5b5b50565b61051c610c0663ffffffff16565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156105e65761055e83610c3963ffffffff16565b60008373ffffffffffffffffffffffffffffffffffffffff168383604051808383808284378083019250505092505050600060405180830381855af49150503d80600081146105c9576040519150601f19603f3d011682016040523d82523d6000602084013e6105ce565b606091505b505090508015156105df5760006000fd5b505b6105f5565b6105f461047863ffffffff16565b5b5b505050565b600061060b610c0663ffffffff16565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156106585761064c610ba063ffffffff16565b9050610653565b610667565b61066661047863ffffffff16565b5b5b90565b610679610c0663ffffffff16565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156107ed57600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515610734576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526036815260200180610da56036913960400191505060405180910390fd5b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f610763610c0663ffffffff16565b82604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a16107e781610c8f63ffffffff16565b5b6107fc565b6107fb61047863ffffffff16565b5b5b50565b600073ffffffffffffffffffffffffffffffffffffffff16610826610ba063ffffffff16565b73ffffffffffffffffffffffffffffffffffffffff161415156108495760006000fd5b61085983826108e563ffffffff16565b600160405180807f656970313936372e70726f78792e61646d696e000000000000000000000000008152602001506013019050604051809103902060001c0360001b600019167fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610360001b600019161415156108d057fe5b6108df82610c8f63ffffffff16565b5b505050565b600073ffffffffffffffffffffffffffffffffffffffff1661090b610ba063ffffffff16565b73ffffffffffffffffffffffffffffffffffffffff1614151561092e5760006000fd5b600160405180807f656970313936372e70726f78792e696d706c656d656e746174696f6e00000000815260200150601c019050604051809103902060001c0360001b600019167f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b600019161415156109a557fe5b6109b482610cbf63ffffffff16565b600081511115610a865760008273ffffffffffffffffffffffffffffffffffffffff16826040518082805190602001908083835b602083101515610a0e57805182525b6020820191506020810190506020830392506109e8565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d8060008114610a6e576040519150601f19603f3d011682016040523d82523d6000602084013e610a73565b606091505b50509050801515610a845760006000fd5b505b5b5050565b6000610a9b610c0663ffffffff16565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610ae857610adc610c0663ffffffff16565b9050610ae3565b610af7565b610af661047863ffffffff16565b5b5b90565b610b09610c0663ffffffff16565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151515610b8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526032815260200180610d736032913960400191505060405180910390fd5b610b9d610d5563ffffffff16565b5b565b600060007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b905080549150505b90565b36600060003760006000366000845af43d600060003e8060008114610bfb573d6000f3610c00565b3d6000fd5b50505b50565b600060007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610360001b905080549150505b90565b610c4881610cbf63ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a25b50565b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610360001b9050818155505b50565b610cce81610d5863ffffffff16565b1515610d25576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603b815260200180610ddb603b913960400191505060405180910390fd5b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b9050818155505b50565b5b565b60006000823b905060008111915050610d6d56505b91905056fe43616e6e6f742063616c6c2066616c6c6261636b2066756e6374696f6e2066726f6d207468652070726f78792061646d696e43616e6e6f74206368616e6765207468652061646d696e206f6620612070726f787920746f20746865207a65726f206164647265737343616e6e6f742073657420612070726f787920696d706c656d656e746174696f6e20746f2061206e6f6e2d636f6e74726163742061646472657373a2646970667358221220f60be7282baa81611b9ca8e718a252521899b4a2dc2e8509cf042ef2d255048964736f6c634300060a0033",
  "deployedBytecode": "0x60806040523480156100115760006000fd5b506004361061005c5760003560e01c8063290f8f5614610062578063332d66261461024d5780636150864c1461043857806381ae1f5b14610585578063b3eeb5e2146106145761005c565b60006000fd5b61020b600480360360a08110156100795760006000fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001906401000000008111156100e15760006000fd5b8201836020820111156100f45760006000fd5b803590602001918460018302840111640100000000831117156101175760006000fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509090919290909192908035906020019064010000000081111561017f5760006000fd5b8201836020820111156101925760006000fd5b803590602001918460018302840111640100000000831117156101b55760006000fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050909091929090919290505050610737565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103f6600480360360a08110156102645760006000fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001906401000000008111156102cc5760006000fd5b8201836020820111156102df5760006000fd5b803590602001918460018302840111640100000000831117156103025760006000fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509090919290909192908035906020019064010000000081111561036a5760006000fd5b82018360208201111561037d5760006000fd5b803590602001918460018302840111640100000000831117156103a05760006000fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505090909192909091929050505061088f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6105436004803603608081101561044f5760006000fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001906401000000008111156104b75760006000fd5b8201836020820111156104ca5760006000fd5b803590602001918460018302840111640100000000831117156104ed5760006000fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050909091929090919290505050610975565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6105d26004803603604081101561059c5760006000fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610999565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6106f56004803603604081101561062b5760006000fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001906401000000008111156106695760006000fd5b82018360208201111561067c5760006000fd5b8035906020019184600183028401116401000000008311171561069f5760006000fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050909091929090919290505050610a9b565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6000600061086b8787878730604051602001808681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b815260140183805190602001908083835b6020831015156107ec57805182525b6020820191506020810190506020830392506107c6565b6001836020036101000a0380198251168184511680821785525050505050509050018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014019550505050505060405160208183030381529060405280519060200120610c3e63ffffffff16565b905061087d8184610ca663ffffffff16565b91505061088656505b95945050505050565b600060006108a6878787878761073763ffffffff16565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515610950576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f496e76616c6964207369676e617475726500000000000000000000000000000081526020015060200191505060405180910390fd5b6109638787878785610dcd63ffffffff16565b91505061096c56505b95945050505050565b600061098a8585858533610dcd63ffffffff16565b9050610991565b949350505050565b600060006109ad8484610f9363ffffffff16565b9050600060ff60f81b308360006000505460405160200180857effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526001018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018360001916600019168152602001826000191660001916815260200194505050505060405160208183030381529060405280519060200120905060608160001916901b60601c92505050610a955650505b92915050565b600060008360601b90506040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528160148201527f5af43d82803e903d91602b57fd5bf3000000000000000000000000000000000060288201526037816000f09250507efffc2da0b561cae30d9826d37709e9421c4725faebc226cbbb7ef5fc5e734982604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1600083511115610c365760008273ffffffffffffffffffffffffffffffffffffffff16846040518082805190602001908083835b602083101515610bbc57805182525b602082019150602081019050602083039250610b96565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610c1e576040519150601f19603f3d011682016040523d82523d6000602084013e610c23565b606091505b50509050801515610c345760006000fd5b505b505b92915050565b60008160405160200180807f19457468657265756d205369676e6564204d6573736167653a0a333200000000815260200150601c018260001916600019168152602001915050604051602081830303815290604052805190602001209050610ca1565b919050565b600060418251141515610cbc5760009050610dc7565b6000600060006020850151925060408501519150606085015160001a90507f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08260001c1115610d115760009350505050610dc7565b601b8160ff1614158015610d295750601c8160ff1614155b15610d3a5760009350505050610dc7565b600186828585604051600081526020016040526040518085600019166000191681526020018460ff1660ff168152602001836000191660001916815260200182600019166000191681526020019450505050506020604051602081039080840390855afa158015610db0573d600060003e3d6000fd5b505050602060405103519350505050610dc7565050505b92915050565b60006000610de1878461100063ffffffff16565b90507efffc2da0b561cae30d9826d37709e9421c4725faebc226cbbb7ef5fc5e734981604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a18073ffffffffffffffffffffffffffffffffffffffff1663cf7a1d778787876040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610f185780820151818401525b602081019050610efc565b50505050905090810190601f168015610f455780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b158015610f675760006000fd5b505af1158015610f7c573d600060003e3d6000fd5b5050505080915050610f8a56505b95945050505050565b60008282604051602001808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b815260140192505050604051602081830303815290604052805190602001209050610ffa565b92915050565b600060006060604051806020016110169061106e565b6020820181038252601f19601f820116604052509050600061103e8686610f9363ffffffff16565b9050808251602084016000f59250823b151561105a5760006000fd5b829350505050611068565050505b92915050565b610e718061107c8339019056fe60806040523480156100115760006000fd5b50610017565b610e4b806100266000396000f3fe6080604052600436106100745760003560e01c80638f2839701161004e5780638f283970146101e7578063cf7a1d771461023a578063d1f578941461033d578063f851a440146104205761008b565b80633659cfe61461009d5780634f1ef286146100f05780635c60da1b1461018f5761008b565b3661008b575b61008861047863ffffffff16565b5b005b5b61009a61047863ffffffff16565b5b005b3480156100aa5760006000fd5b506100ee600480360360208110156100c25760006000fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506104a5565b005b61018d600480360360408110156101075760006000fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001906401000000008111156101455760006000fd5b8201836020820111156101585760006000fd5b8035906020019184600183028401116401000000008311171561017b5760006000fd5b9091929390909192939050505061050e565b005b34801561019c5760006000fd5b506101a56105fb565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156101f45760006000fd5b506102386004803603602081101561020c5760006000fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061066b565b005b61033b600480360360608110156102515760006000fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001906401000000008111156102af5760006000fd5b8201836020820111156102c25760006000fd5b803590602001918460018302840111640100000000831117156102e55760006000fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050909091929090919290505050610800565b005b61041e600480360360408110156103545760006000fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001906401000000008111156103925760006000fd5b8201836020820111156103a55760006000fd5b803590602001918460018302840111640100000000831117156103c85760006000fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509090919290909192905050506108e5565b005b34801561042d5760006000fd5b50610436610a8b565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610486610afb63ffffffff16565b6104a2610497610ba063ffffffff16565b610bd363ffffffff16565b5b565b6104b3610c0663ffffffff16565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156104fb576104f581610c3963ffffffff16565b5b61050a565b61050961047863ffffffff16565b5b5b50565b61051c610c0663ffffffff16565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156105e65761055e83610c3963ffffffff16565b60008373ffffffffffffffffffffffffffffffffffffffff168383604051808383808284378083019250505092505050600060405180830381855af49150503d80600081146105c9576040519150601f19603f3d011682016040523d82523d6000602084013e6105ce565b606091505b505090508015156105df5760006000fd5b505b6105f5565b6105f461047863ffffffff16565b5b5b505050565b600061060b610c0663ffffffff16565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156106585761064c610ba063ffffffff16565b9050610653565b610667565b61066661047863ffffffff16565b5b5b90565b610679610c0663ffffffff16565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156107ed57600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515610734576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526036815260200180610da56036913960400191505060405180910390fd5b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f610763610c0663ffffffff16565b82604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a16107e781610c8f63ffffffff16565b5b6107fc565b6107fb61047863ffffffff16565b5b5b50565b600073ffffffffffffffffffffffffffffffffffffffff16610826610ba063ffffffff16565b73ffffffffffffffffffffffffffffffffffffffff161415156108495760006000fd5b61085983826108e563ffffffff16565b600160405180807f656970313936372e70726f78792e61646d696e000000000000000000000000008152602001506013019050604051809103902060001c0360001b600019167fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610360001b600019161415156108d057fe5b6108df82610c8f63ffffffff16565b5b505050565b600073ffffffffffffffffffffffffffffffffffffffff1661090b610ba063ffffffff16565b73ffffffffffffffffffffffffffffffffffffffff1614151561092e5760006000fd5b600160405180807f656970313936372e70726f78792e696d706c656d656e746174696f6e00000000815260200150601c019050604051809103902060001c0360001b600019167f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b600019161415156109a557fe5b6109b482610cbf63ffffffff16565b600081511115610a865760008273ffffffffffffffffffffffffffffffffffffffff16826040518082805190602001908083835b602083101515610a0e57805182525b6020820191506020810190506020830392506109e8565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d8060008114610a6e576040519150601f19603f3d011682016040523d82523d6000602084013e610a73565b606091505b50509050801515610a845760006000fd5b505b5b5050565b6000610a9b610c0663ffffffff16565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610ae857610adc610c0663ffffffff16565b9050610ae3565b610af7565b610af661047863ffffffff16565b5b5b90565b610b09610c0663ffffffff16565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151515610b8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526032815260200180610d736032913960400191505060405180910390fd5b610b9d610d5563ffffffff16565b5b565b600060007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b905080549150505b90565b36600060003760006000366000845af43d600060003e8060008114610bfb573d6000f3610c00565b3d6000fd5b50505b50565b600060007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610360001b905080549150505b90565b610c4881610cbf63ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a25b50565b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610360001b9050818155505b50565b610cce81610d5863ffffffff16565b1515610d25576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603b815260200180610ddb603b913960400191505060405180910390fd5b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b9050818155505b50565b5b565b60006000823b905060008111915050610d6d56505b91905056fe43616e6e6f742063616c6c2066616c6c6261636b2066756e6374696f6e2066726f6d207468652070726f78792061646d696e43616e6e6f74206368616e6765207468652061646d696e206f6620612070726f787920746f20746865207a65726f206164647265737343616e6e6f742073657420612070726f787920696d706c656d656e746174696f6e20746f2061206e6f6e2d636f6e74726163742061646472657373a2646970667358221220f60be7282baa81611b9ca8e718a252521899b4a2dc2e8509cf042ef2d255048964736f6c634300060a0033a2646970667358221220b33741a10db3f29819b77a0d8a65ae482454127ceb165fc69f3e774226ad6a8f64736f6c634300060a0033",
  "compiler": {
    "name": "solc",
    "version": "0.6.10+commit.00c0fcaf.Emscripten.clang",
    "optimizer": {},
    "evmVersion": "constantinople"
  }
}
