{
  "abi": [
    {
      "inputs": [],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "version",
          "type": "uint8"
        }
      ],
      "name": "Initialized",
      "type": "event"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "registry",
          "type": "address"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "allSourcePaths": {
    "1": "/home/vscode/.brownie/packages/OpenZeppelin/openzeppelin-contracts@4.7.3/contracts/proxy/utils/Initializable.sol",
    "10": "/home/vscode/.brownie/packages/OpenZeppelin/openzeppelin-contracts@4.7.3/contracts/utils/Address.sol",
    "11": "/home/vscode/.brownie/packages/OpenZeppelin/openzeppelin-contracts@4.7.3/contracts/utils/Context.sol",
    "22": "/home/vscode/.brownie/packages/etherisc/gif-contracts@b58fd27/contracts/shared/CoreController.sol",
    "33": "/home/vscode/.brownie/packages/etherisc/gif-interface@3b0002a/contracts/modules/IAccess.sol",
    "38": "/home/vscode/.brownie/packages/etherisc/gif-interface@3b0002a/contracts/modules/IRegistry.sol"
  },
  "ast": {
    "absolutePath": "/home/vscode/.brownie/packages/etherisc/gif-contracts@b58fd27/contracts/shared/CoreController.sol",
    "exportedSymbols": {
      "Address": [
        24852
      ],
      "Context": [
        15648
      ],
      "CoreController": [
        21649
      ],
      "IAccess": [
        22927
      ],
      "IRegistry": [
        21976
      ],
      "Initializable": [
        23690
      ]
    },
    "id": 21650,
    "license": "Apache-2.0",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 21515,
        "literals": [
          "solidity",
          "0.8",
          ".2"
        ],
        "nodeType": "PragmaDirective",
        "src": "39:22:22"
      },
      {
        "absolutePath": "/home/vscode/.brownie/packages/etherisc/gif-interface@3b0002a/contracts/modules/IAccess.sol",
        "file": "@etherisc/gif-interface/contracts/modules/IAccess.sol",
        "id": 21516,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 21650,
        "sourceUnit": 22928,
        "src": "63:63:22",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/vscode/.brownie/packages/etherisc/gif-interface@3b0002a/contracts/modules/IRegistry.sol",
        "file": "@etherisc/gif-interface/contracts/modules/IRegistry.sol",
        "id": 21517,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 21650,
        "sourceUnit": 21977,
        "src": "127:65:22",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/vscode/.brownie/packages/OpenZeppelin/openzeppelin-contracts@4.7.3/contracts/proxy/utils/Initializable.sol",
        "file": "@openzeppelin/contracts/proxy/utils/Initializable.sol",
        "id": 21518,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 21650,
        "sourceUnit": 23691,
        "src": "194:63:22",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/vscode/.brownie/packages/OpenZeppelin/openzeppelin-contracts@4.7.3/contracts/utils/Context.sol",
        "file": "@openzeppelin/contracts/utils/Context.sol",
        "id": 21519,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 21650,
        "sourceUnit": 15649,
        "src": "258:51:22",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "baseName": {
              "id": 21520,
              "name": "Context",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 15648,
              "src": "342:7:22"
            },
            "id": 21521,
            "nodeType": "InheritanceSpecifier",
            "src": "342:7:22"
          },
          {
            "baseName": {
              "id": 21522,
              "name": "Initializable",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 23690,
              "src": "355:13:22"
            },
            "id": 21523,
            "nodeType": "InheritanceSpecifier",
            "src": "355:13:22"
          }
        ],
        "contractDependencies": [
          15648,
          23690
        ],
        "contractKind": "contract",
        "fullyImplemented": true,
        "id": 21649,
        "linearizedBaseContracts": [
          21649,
          23690,
          15648
        ],
        "name": "CoreController",
        "nameLocation": "320:14:22",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": false,
            "id": 21526,
            "mutability": "mutable",
            "name": "_registry",
            "nameLocation": "395:9:22",
            "nodeType": "VariableDeclaration",
            "scope": 21649,
            "src": "376:28:22",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_IRegistry_$21976",
              "typeString": "contract IRegistry"
            },
            "typeName": {
              "id": 21525,
              "nodeType": "UserDefinedTypeName",
              "pathNode": {
                "id": 21524,
                "name": "IRegistry",
                "nodeType": "IdentifierPath",
                "referencedDeclaration": 21976,
                "src": "376:9:22"
              },
              "referencedDeclaration": 21976,
              "src": "376:9:22",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IRegistry_$21976",
                "typeString": "contract IRegistry"
              }
            },
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 21529,
            "mutability": "mutable",
            "name": "_access",
            "nameLocation": "427:7:22",
            "nodeType": "VariableDeclaration",
            "scope": 21649,
            "src": "410:24:22",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_IAccess_$22927",
              "typeString": "contract IAccess"
            },
            "typeName": {
              "id": 21528,
              "nodeType": "UserDefinedTypeName",
              "pathNode": {
                "id": 21527,
                "name": "IAccess",
                "nodeType": "IdentifierPath",
                "referencedDeclaration": 22927,
                "src": "410:7:22"
              },
              "referencedDeclaration": 22927,
              "src": "410:7:22",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IAccess_$22927",
                "typeString": "contract IAccess"
              }
            },
            "visibility": "internal"
          },
          {
            "body": {
              "id": 21535,
              "nodeType": "Block",
              "src": "456:39:22",
              "statements": [
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 21532,
                      "name": "_disableInitializers",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 23689,
                      "src": "466:20:22",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 21533,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "466:22:22",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 21534,
                  "nodeType": "ExpressionStatement",
                  "src": "466:22:22"
                }
              ]
            },
            "id": 21536,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [],
            "name": "",
            "nameLocation": "-1:-1:-1",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 21530,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "453:2:22"
            },
            "returnParameters": {
              "id": 21531,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "456:0:22"
            },
            "scope": 21649,
            "src": "441:54:22",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 21549,
              "nodeType": "Block",
              "src": "533:164:22",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 21541,
                              "name": "_msgSender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 15638,
                              "src": "587:10:22",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                                "typeString": "function () view returns (address)"
                              }
                            },
                            "id": 21542,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "587:12:22",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "hexValue": "496e7374616e63654f70657261746f7253657276696365",
                            "id": 21543,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "601:25:22",
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_893eee863631637173ead46f1c66388136d13bfeb40cdedfb3bfe4f34f933544",
                              "typeString": "literal_string \"InstanceOperatorService\""
                            },
                            "value": "InstanceOperatorService"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_stringliteral_893eee863631637173ead46f1c66388136d13bfeb40cdedfb3bfe4f34f933544",
                              "typeString": "literal_string \"InstanceOperatorService\""
                            }
                          ],
                          "expression": {
                            "id": 21539,
                            "name": "_registry",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 21526,
                            "src": "564:9:22",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IRegistry_$21976",
                              "typeString": "contract IRegistry"
                            }
                          },
                          "id": 21540,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "ensureSender",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 21963,
                          "src": "564:22:22",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$_t_address_$_t_bytes32_$returns$_t_bool_$",
                            "typeString": "function (address,bytes32) view external returns (bool)"
                          }
                        },
                        "id": 21544,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "564:63:22",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4552524f523a4352432d3030313a4e4f545f494e5354414e43455f4f50455241544f52",
                        "id": 21545,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "641:37:22",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_d157a75ec4da2afc8e9060e47a13bbf5445dd536a21de8b93f5ec497779f5fc1",
                          "typeString": "literal_string \"ERROR:CRC-001:NOT_INSTANCE_OPERATOR\""
                        },
                        "value": "ERROR:CRC-001:NOT_INSTANCE_OPERATOR"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_d157a75ec4da2afc8e9060e47a13bbf5445dd536a21de8b93f5ec497779f5fc1",
                          "typeString": "literal_string \"ERROR:CRC-001:NOT_INSTANCE_OPERATOR\""
                        }
                      ],
                      "id": 21538,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "543:7:22",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 21546,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "543:136:22",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 21547,
                  "nodeType": "ExpressionStatement",
                  "src": "543:136:22"
                },
                {
                  "id": 21548,
                  "nodeType": "PlaceholderStatement",
                  "src": "689:1:22"
                }
              ]
            },
            "id": 21550,
            "name": "onlyInstanceOperator",
            "nameLocation": "510:20:22",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 21537,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "530:2:22"
            },
            "src": "501:196:22",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 21577,
              "nodeType": "Block",
              "src": "743:394:22",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 21562,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "arguments": [
                            {
                              "id": 21557,
                              "name": "this",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -28,
                              "src": "819:4:22",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_CoreController_$21649",
                                "typeString": "contract CoreController"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_CoreController_$21649",
                                "typeString": "contract CoreController"
                              }
                            ],
                            "id": 21556,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "811:7:22",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 21555,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "811:7:22",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 21558,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "811:13:22",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "arguments": [
                            {
                              "id": 21560,
                              "name": "module",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 21552,
                              "src": "848:6:22",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "id": 21559,
                            "name": "_getContractAddress",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 21648,
                            "src": "828:19:22",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_address_$",
                              "typeString": "function (bytes32) view returns (address)"
                            }
                          },
                          "id": 21561,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "828:27:22",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "811:44:22",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4552524f523a4352432d3030323a4e4f545f4f4e5f53544f52414745",
                        "id": 21563,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "869:30:22",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_ac3eb591ac3909b9f0bbae9d36ee03b1d7c2c943a70b5dea1ee6992346dcbcd4",
                          "typeString": "literal_string \"ERROR:CRC-002:NOT_ON_STORAGE\""
                        },
                        "value": "ERROR:CRC-002:NOT_ON_STORAGE"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_ac3eb591ac3909b9f0bbae9d36ee03b1d7c2c943a70b5dea1ee6992346dcbcd4",
                          "typeString": "literal_string \"ERROR:CRC-002:NOT_ON_STORAGE\""
                        }
                      ],
                      "id": 21554,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "790:7:22",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 21564,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "790:119:22",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 21565,
                  "nodeType": "ExpressionStatement",
                  "src": "790:119:22"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 21572,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 21567,
                            "name": "_msgSender",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 15638,
                            "src": "1007:10:22",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                              "typeString": "function () view returns (address)"
                            }
                          },
                          "id": 21568,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1007:12:22",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "50726f6475637453657276696365",
                              "id": 21570,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1043:16:22",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_a0656cfcc1bc970b947aca201a5cc1b43cf3c3649a4b2d6f82968797074fe0b8",
                                "typeString": "literal_string \"ProductService\""
                              },
                              "value": "ProductService"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_stringliteral_a0656cfcc1bc970b947aca201a5cc1b43cf3c3649a4b2d6f82968797074fe0b8",
                                "typeString": "literal_string \"ProductService\""
                              }
                            ],
                            "id": 21569,
                            "name": "_getContractAddress",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 21648,
                            "src": "1023:19:22",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_address_$",
                              "typeString": "function (bytes32) view returns (address)"
                            }
                          },
                          "id": 21571,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1023:37:22",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "1007:53:22",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4552524f523a4352432d3030333a4e4f545f50524f445543545f53455256494345",
                        "id": 21573,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1074:35:22",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_daba6d4f8168e6c5c18c70dafe4890a19902bb1f9bd9ebb62ac7a88c2fd63dd0",
                          "typeString": "literal_string \"ERROR:CRC-003:NOT_PRODUCT_SERVICE\""
                        },
                        "value": "ERROR:CRC-003:NOT_PRODUCT_SERVICE"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_daba6d4f8168e6c5c18c70dafe4890a19902bb1f9bd9ebb62ac7a88c2fd63dd0",
                          "typeString": "literal_string \"ERROR:CRC-003:NOT_PRODUCT_SERVICE\""
                        }
                      ],
                      "id": 21566,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "986:7:22",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 21574,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "986:133:22",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 21575,
                  "nodeType": "ExpressionStatement",
                  "src": "986:133:22"
                },
                {
                  "id": 21576,
                  "nodeType": "PlaceholderStatement",
                  "src": "1129:1:22"
                }
              ]
            },
            "id": 21578,
            "name": "onlyPolicyFlow",
            "nameLocation": "712:14:22",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 21553,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21552,
                  "mutability": "mutable",
                  "name": "module",
                  "nameLocation": "735:6:22",
                  "nodeType": "VariableDeclaration",
                  "scope": 21578,
                  "src": "727:14:22",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 21551,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "727:7:22",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "726:16:22"
            },
            "src": "703:434:22",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 21608,
              "nodeType": "Block",
              "src": "1200:175:22",
              "statements": [
                {
                  "expression": {
                    "id": 21589,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 21585,
                      "name": "_registry",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21526,
                      "src": "1210:9:22",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IRegistry_$21976",
                        "typeString": "contract IRegistry"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 21587,
                          "name": "registry",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 21580,
                          "src": "1232:8:22",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 21586,
                        "name": "IRegistry",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21976,
                        "src": "1222:9:22",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_IRegistry_$21976_$",
                          "typeString": "type(contract IRegistry)"
                        }
                      },
                      "id": 21588,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1222:19:22",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IRegistry_$21976",
                        "typeString": "contract IRegistry"
                      }
                    },
                    "src": "1210:31:22",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IRegistry_$21976",
                      "typeString": "contract IRegistry"
                    }
                  },
                  "id": 21590,
                  "nodeType": "ExpressionStatement",
                  "src": "1210:31:22"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    },
                    "id": 21594,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 21591,
                        "name": "_getName",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21617,
                        "src": "1255:8:22",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$__$returns$_t_bytes32_$",
                          "typeString": "function () pure returns (bytes32)"
                        }
                      },
                      "id": 21592,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1255:10:22",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "hexValue": "416363657373",
                      "id": 21593,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "string",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "1269:8:22",
                      "typeDescriptions": {
                        "typeIdentifier": "t_stringliteral_662ef9f10158779adc6a36d83dac352a0d38be4aaefa069e4f4fdcebe6a5d3ee",
                        "typeString": "literal_string \"Access\""
                      },
                      "value": "Access"
                    },
                    "src": "1255:22:22",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 21604,
                  "nodeType": "IfStatement",
                  "src": "1251:81:22",
                  "trueBody": {
                    "id": 21603,
                    "nodeType": "Block",
                    "src": "1279:53:22",
                    "statements": [
                      {
                        "expression": {
                          "id": 21601,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 21595,
                            "name": "_access",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 21529,
                            "src": "1281:7:22",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IAccess_$22927",
                              "typeString": "contract IAccess"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "hexValue": "416363657373",
                                    "id": 21598,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "string",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "1319:8:22",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_stringliteral_662ef9f10158779adc6a36d83dac352a0d38be4aaefa069e4f4fdcebe6a5d3ee",
                                      "typeString": "literal_string \"Access\""
                                    },
                                    "value": "Access"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_stringliteral_662ef9f10158779adc6a36d83dac352a0d38be4aaefa069e4f4fdcebe6a5d3ee",
                                      "typeString": "literal_string \"Access\""
                                    }
                                  ],
                                  "id": 21597,
                                  "name": "_getContractAddress",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 21648,
                                  "src": "1299:19:22",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_address_$",
                                    "typeString": "function (bytes32) view returns (address)"
                                  }
                                },
                                "id": 21599,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "1299:29:22",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 21596,
                              "name": "IAccess",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 22927,
                              "src": "1291:7:22",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_IAccess_$22927_$",
                                "typeString": "type(contract IAccess)"
                              }
                            },
                            "id": 21600,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1291:38:22",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IAccess_$22927",
                              "typeString": "contract IAccess"
                            }
                          },
                          "src": "1281:48:22",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IAccess_$22927",
                            "typeString": "contract IAccess"
                          }
                        },
                        "id": 21602,
                        "nodeType": "ExpressionStatement",
                        "src": "1281:48:22"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 21605,
                      "name": "_afterInitialize",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21623,
                      "src": "1350:16:22",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 21606,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1350:18:22",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 21607,
                  "nodeType": "ExpressionStatement",
                  "src": "1350:18:22"
                }
              ]
            },
            "functionSelector": "c4d66de8",
            "id": 21609,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 21583,
                "modifierName": {
                  "id": 21582,
                  "name": "initializer",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 23610,
                  "src": "1188:11:22"
                },
                "nodeType": "ModifierInvocation",
                "src": "1188:11:22"
              }
            ],
            "name": "initialize",
            "nameLocation": "1152:10:22",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 21581,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21580,
                  "mutability": "mutable",
                  "name": "registry",
                  "nameLocation": "1171:8:22",
                  "nodeType": "VariableDeclaration",
                  "scope": 21609,
                  "src": "1163:16:22",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 21579,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1163:7:22",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1162:18:22"
            },
            "returnParameters": {
              "id": 21584,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1200:0:22"
            },
            "scope": 21649,
            "src": "1143:232:22",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 21616,
              "nodeType": "Block",
              "src": "1440:14:22",
              "statements": [
                {
                  "expression": {
                    "hexValue": "",
                    "id": 21614,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1449:2:22",
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                      "typeString": "literal_string \"\""
                    },
                    "value": ""
                  },
                  "functionReturnParameters": 21613,
                  "id": 21615,
                  "nodeType": "Return",
                  "src": "1442:9:22"
                }
              ]
            },
            "id": 21617,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_getName",
            "nameLocation": "1390:8:22",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 21610,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1398:2:22"
            },
            "returnParameters": {
              "id": 21613,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21612,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 21617,
                  "src": "1431:7:22",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 21611,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1431:7:22",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1430:9:22"
            },
            "scope": 21649,
            "src": "1381:73:22",
            "stateMutability": "pure",
            "virtual": true,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 21622,
              "nodeType": "Block",
              "src": "1522:2:22",
              "statements": []
            },
            "id": 21623,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 21620,
                "modifierName": {
                  "id": 21619,
                  "name": "onlyInitializing",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 23653,
                  "src": "1505:16:22"
                },
                "nodeType": "ModifierInvocation",
                "src": "1505:16:22"
              }
            ],
            "name": "_afterInitialize",
            "nameLocation": "1469:16:22",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 21618,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1485:2:22"
            },
            "returnParameters": {
              "id": 21621,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1522:0:22"
            },
            "scope": 21649,
            "src": "1460:64:22",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 21647,
              "nodeType": "Block",
              "src": "1629:194:22",
              "statements": [
                {
                  "expression": {
                    "id": 21635,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 21630,
                      "name": "contractAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21628,
                      "src": "1640:15:22",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 21633,
                          "name": "contractName",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 21625,
                          "src": "1680:12:22",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        ],
                        "expression": {
                          "id": 21631,
                          "name": "_registry",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 21526,
                          "src": "1658:9:22",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IRegistry_$21976",
                            "typeString": "contract IRegistry"
                          }
                        },
                        "id": 21632,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "getContract",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 21949,
                        "src": "1658:21:22",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_view$_t_bytes32_$returns$_t_address_$",
                          "typeString": "function (bytes32) view external returns (address)"
                        }
                      },
                      "id": 21634,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1658:35:22",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "1640:53:22",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 21636,
                  "nodeType": "ExpressionStatement",
                  "src": "1640:53:22"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 21643,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 21638,
                          "name": "contractAddress",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 21628,
                          "src": "1724:15:22",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 21641,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1751:1:22",
                              "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": 21640,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "1743:7:22",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 21639,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "1743:7:22",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 21642,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1743:10:22",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "1724:29:22",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4552524f523a4352432d3030343a434f4e54524143545f4e4f545f52454749535445524544",
                        "id": 21644,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1767:39:22",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_1151568b2e90fb41f06ae2a42f53bc473041310a718fc5f2f0306fc15b7a1271",
                          "typeString": "literal_string \"ERROR:CRC-004:CONTRACT_NOT_REGISTERED\""
                        },
                        "value": "ERROR:CRC-004:CONTRACT_NOT_REGISTERED"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_1151568b2e90fb41f06ae2a42f53bc473041310a718fc5f2f0306fc15b7a1271",
                          "typeString": "literal_string \"ERROR:CRC-004:CONTRACT_NOT_REGISTERED\""
                        }
                      ],
                      "id": 21637,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "1703:7:22",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 21645,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1703:113:22",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 21646,
                  "nodeType": "ExpressionStatement",
                  "src": "1703:113:22"
                }
              ]
            },
            "id": 21648,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_getContractAddress",
            "nameLocation": "1539:19:22",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 21626,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21625,
                  "mutability": "mutable",
                  "name": "contractName",
                  "nameLocation": "1567:12:22",
                  "nodeType": "VariableDeclaration",
                  "scope": 21648,
                  "src": "1559:20:22",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 21624,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1559:7:22",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1558:22:22"
            },
            "returnParameters": {
              "id": 21629,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21628,
                  "mutability": "mutable",
                  "name": "contractAddress",
                  "nameLocation": "1612:15:22",
                  "nodeType": "VariableDeclaration",
                  "scope": 21648,
                  "src": "1604:23:22",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 21627,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1604:7:22",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1603:25:22"
            },
            "scope": 21649,
            "src": "1530:293:22",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          }
        ],
        "scope": 21650,
        "src": "311:1514:22"
      }
    ],
    "src": "39:1787:22"
  },
  "bytecode": "608060405234801561001057600080fd5b5061001961001e565b6100de565b600054610100900460ff161561008a5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811610156100dc576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6103c0806100ed6000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063c4d66de814610030575b600080fd5b61004361003e366004610337565b610045565b005b600054610100900460ff16158080156100655750600054600160ff909116105b806100865750610074306101cf565b158015610086575060005460ff166001145b6100ee5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff191660011790558015610111576000805461ff0019166101001790555b6000805462010000600160b01b031916620100006001600160a01b0385160217905561013b600090565b6541636365737360d01b1461017d5761015c6541636365737360d01b6101e2565b600180546001600160a01b0319166001600160a01b03929092169190911790555b6101856102ca565b80156101cb576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b6001600160a01b0381163b15155b919050565b60008054604051631c2d8fb360e31b815260048101849052620100009091046001600160a01b03169063e16c7d989060240160206040518083038186803b15801561022c57600080fd5b505afa158015610240573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610264919061035a565b90506001600160a01b0381166101dd5760405162461bcd60e51b815260206004820152602560248201527f4552524f523a4352432d3030343a434f4e54524143545f4e4f545f5245474953604482015264151154915160da1b60648201526084016100e5565b600054610100900460ff166103355760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016100e5565b565b600060208284031215610348578081fd5b813561035381610372565b9392505050565b60006020828403121561036b578081fd5b8151610353815b6001600160a01b038116811461038757600080fd5b5056fea2646970667358221220c2ca1e51826afd14a684f782103dd699edcc76a37429d92b5ad7342d5f10e62064736f6c63430008020033",
  "bytecodeSha1": "b2267b5d5f04e11f52bacb209a3af85ff54da9ad",
  "compiler": {
    "evm_version": "istanbul",
    "optimizer": {
      "enabled": true,
      "runs": 200
    },
    "version": "0.8.2+commit.661d1103"
  },
  "contractName": "CoreController",
  "coverageMap": {
    "branches": {
      "1": {
        "CoreController._afterInitialize": {
          "9": [
            4888,
            4901,
            true
          ]
        },
        "CoreController.initialize": {
          "8": [
            3209,
            3242,
            false
          ]
        }
      },
      "10": {},
      "11": {},
      "22": {
        "CoreController._getContractAddress": {
          "7": [
            1724,
            1753,
            true
          ]
        },
        "CoreController.initialize": {
          "6": [
            1255,
            1277,
            false
          ]
        }
      },
      "33": {},
      "38": {}
    },
    "statements": {
      "1": {},
      "10": {
        "Address.isContract": {
          "3": [
            1458,
            1488
          ]
        }
      },
      "11": {},
      "22": {
        "CoreController._getContractAddress": {
          "4": [
            1640,
            1693
          ],
          "5": [
            1703,
            1816
          ]
        },
        "CoreController.initialize": {
          "0": [
            1210,
            1241
          ],
          "1": [
            1281,
            1329
          ],
          "2": [
            1350,
            1368
          ]
        }
      },
      "33": {},
      "38": {}
    }
  },
  "dependencies": [
    "OpenZeppelin/openzeppelin-contracts@4.7.3/Address",
    "OpenZeppelin/openzeppelin-contracts@4.7.3/Context",
    "etherisc/gif-interface@3b0002a/IAccess",
    "etherisc/gif-interface@3b0002a/IRegistry",
    "OpenZeppelin/openzeppelin-contracts@4.7.3/Initializable"
  ],
  "deployedBytecode": "608060405234801561001057600080fd5b506004361061002b5760003560e01c8063c4d66de814610030575b600080fd5b61004361003e366004610337565b610045565b005b600054610100900460ff16158080156100655750600054600160ff909116105b806100865750610074306101cf565b158015610086575060005460ff166001145b6100ee5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff191660011790558015610111576000805461ff0019166101001790555b6000805462010000600160b01b031916620100006001600160a01b0385160217905561013b600090565b6541636365737360d01b1461017d5761015c6541636365737360d01b6101e2565b600180546001600160a01b0319166001600160a01b03929092169190911790555b6101856102ca565b80156101cb576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b6001600160a01b0381163b15155b919050565b60008054604051631c2d8fb360e31b815260048101849052620100009091046001600160a01b03169063e16c7d989060240160206040518083038186803b15801561022c57600080fd5b505afa158015610240573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610264919061035a565b90506001600160a01b0381166101dd5760405162461bcd60e51b815260206004820152602560248201527f4552524f523a4352432d3030343a434f4e54524143545f4e4f545f5245474953604482015264151154915160da1b60648201526084016100e5565b600054610100900460ff166103355760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016100e5565b565b600060208284031215610348578081fd5b813561035381610372565b9392505050565b60006020828403121561036b578081fd5b8151610353815b6001600160a01b038116811461038757600080fd5b5056fea2646970667358221220c2ca1e51826afd14a684f782103dd699edcc76a37429d92b5ad7342d5f10e62064736f6c63430008020033",
  "deployedSourceMap": "311:1514:22:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1143:232;;;;;;:::i;:::-;;:::i;:::-;;;3100:19:1;3123:13;;;;;;3122:14;;3168:34;;;;-1:-1:-1;3186:12:1;;3201:1;3186:12;;;;:16;3168:34;3167:97;;;;3209:33;3236:4;3209:18;:33::i;:::-;3208:34;:55;;;;-1:-1:-1;3246:12:1;;;;;:17;3208:55;3146:190;;;;-1:-1:-1;;;3146:190:1;;1531:2:67;3146:190:1;;;1513:21:67;1570:2;1550:18;;;1543:30;1609:34;1589:18;;;1582:62;-1:-1:-1;;;1660:18:67;;;1653:44;1714:19;;3146:190:1;;;;;;;;;3346:12;:16;;-1:-1:-1;;3346:16:1;3361:1;3346:16;;;3372:65;;;;3406:13;:20;;-1:-1:-1;;3406:20:1;;;;;3372:65;1210:9:22::1;:31:::0;;-1:-1:-1;;;;;;1210:31:22::1;::::0;-1:-1:-1;;;;;1210:31:22;::::1;;;::::0;;1255:10:::1;1431:7:::0;1381:73;;1255:10:::1;-1:-1:-1::0;;;1255:22:22::1;1251:81;;1299:29;-1:-1:-1::0;;;1299:19:22::1;:29::i;:::-;1281:7;:48:::0;;-1:-1:-1;;;;;;1281:48:22::1;-1:-1:-1::0;;;;;1281:48:22;;;::::1;::::0;;;::::1;::::0;;1251:81:::1;1350:18;:16;:18::i;:::-;3461:14:1::0;3457:99;;;3507:5;3491:21;;-1:-1:-1;;3491:21:1;;;3531:14;;-1:-1:-1;876:36:67;;3531:14:1;;864:2:67;849:18;3531:14:1;;;;;;;3457:99;1143:232:22;;:::o;1175:320:10:-;-1:-1:-1;;;;;1465:19:10;;;:23;;1175:320;;;;:::o;1530:293:22:-;1604:23;1658:9;;:35;;-1:-1:-1;;;1658:35:22;;;;;688:25:67;;;1658:9:22;;;;-1:-1:-1;;;;;1658:9:22;;:21;;661:18:67;;1658:35:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1640:53;-1:-1:-1;;;;;;1724:29:22;;1703:113;;;;-1:-1:-1;;;1703:113:22;;1125:2:67;1703:113:22;;;1107:21:67;1164:2;1144:18;;;1137:30;1203:34;1183:18;;;1176:62;-1:-1:-1;;;1254:18:67;;;1247:35;1299:19;;1703:113:22;1097:227:67;1460:64:22;4888:13:1;;;;;;;4880:69;;;;-1:-1:-1;;;4880:69:1;;1946:2:67;4880:69:1;;;1928:21:67;1985:2;1965:18;;;1958:30;2024:34;2004:18;;;1997:62;-1:-1:-1;;;2075:18:67;;;2068:41;2126:19;;4880:69:1;1918:233:67;4880:69:1;1460:64:22:o;14:257:67:-;;126:2;114:9;105:7;101:23;97:32;94:2;;;147:6;139;132:22;94:2;191:9;178:23;210:31;235:5;210:31;:::i;:::-;260:5;84:187;-1:-1:-1;;;84:187:67:o;276:261::-;;399:2;387:9;378:7;374:23;370:32;367:2;;;420:6;412;405:22;367:2;457:9;451:16;476:31;501:5;2156:131;-1:-1:-1;;;;;2231:31:67;;2221:42;;2211:2;;2277:1;2274;2267:12;2211:2;2201:86;:::o",
  "language": "Solidity",
  "natspec": {
    "kind": "dev",
    "methods": {},
    "version": 1
  },
  "offset": [
    311,
    1825
  ],
  "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x2B JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xC4D66DE8 EQ PUSH2 0x30 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x43 PUSH2 0x3E CALLDATASIZE PUSH1 0x4 PUSH2 0x337 JUMP JUMPDEST PUSH2 0x45 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO DUP1 DUP1 ISZERO PUSH2 0x65 JUMPI POP PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0xFF SWAP1 SWAP2 AND LT JUMPDEST DUP1 PUSH2 0x86 JUMPI POP PUSH2 0x74 ADDRESS PUSH2 0x1CF JUMP JUMPDEST ISZERO DUP1 ISZERO PUSH2 0x86 JUMPI POP PUSH1 0x0 SLOAD PUSH1 0xFF AND PUSH1 0x1 EQ JUMPDEST PUSH2 0xEE JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x496E697469616C697A61626C653A20636F6E747261637420697320616C726561 PUSH1 0x44 DUP3 ADD MSTORE PUSH14 0x191E481A5B9A5D1A585B1A5E9959 PUSH1 0x92 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE DUP1 ISZERO PUSH2 0x111 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND PUSH2 0x100 OR SWAP1 SSTORE JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH3 0x10000 PUSH1 0x1 PUSH1 0xB0 SHL SUB NOT AND PUSH3 0x10000 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND MUL OR SWAP1 SSTORE PUSH2 0x13B PUSH1 0x0 SWAP1 JUMP JUMPDEST PUSH6 0x416363657373 PUSH1 0xD0 SHL EQ PUSH2 0x17D JUMPI PUSH2 0x15C PUSH6 0x416363657373 PUSH1 0xD0 SHL PUSH2 0x1E2 JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMPDEST PUSH2 0x185 PUSH2 0x2CA JUMP JUMPDEST DUP1 ISZERO PUSH2 0x1CB JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH1 0x1 DUP2 MSTORE PUSH32 0x7F26B83FF96E1F2B6A682F133852F6798A09C465DA95921460CEFB3847402498 SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND EXTCODESIZE ISZERO ISZERO JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH4 0x1C2D8FB3 PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP5 SWAP1 MSTORE PUSH3 0x10000 SWAP1 SWAP2 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0xE16C7D98 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x22C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x240 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x264 SWAP2 SWAP1 PUSH2 0x35A JUMP JUMPDEST SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x1DD JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x25 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4552524F523A4352432D3030343A434F4E54524143545F4E4F545F5245474953 PUSH1 0x44 DUP3 ADD MSTORE PUSH5 0x1511549151 PUSH1 0xDA SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0xE5 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH2 0x335 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x496E697469616C697A61626C653A20636F6E7472616374206973206E6F742069 PUSH1 0x44 DUP3 ADD MSTORE PUSH11 0x6E697469616C697A696E67 PUSH1 0xA8 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0xE5 JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x348 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x353 DUP2 PUSH2 0x372 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x36B JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x353 DUP2 JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x387 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xC2 0xCA 0x1E MLOAD DUP3 PUSH11 0xFD14A684F782103DD699ED 0xCC PUSH23 0xA37429D92B5AD7342D5F10E62064736F6C634300080200 CALLER ",
  "pcMap": {
    "0": {
      "offset": [
        311,
        1825
      ],
      "op": "PUSH1",
      "path": "22",
      "value": "0x80"
    },
    "2": {
      "fn": null,
      "offset": [
        311,
        1825
      ],
      "op": "PUSH1",
      "path": "22",
      "value": "0x40"
    },
    "4": {
      "fn": null,
      "offset": [
        311,
        1825
      ],
      "op": "MSTORE",
      "path": "22"
    },
    "5": {
      "fn": null,
      "offset": [
        311,
        1825
      ],
      "op": "CALLVALUE",
      "path": "22"
    },
    "6": {
      "fn": null,
      "offset": [
        311,
        1825
      ],
      "op": "DUP1",
      "path": "22"
    },
    "7": {
      "fn": null,
      "offset": [
        311,
        1825
      ],
      "op": "ISZERO",
      "path": "22"
    },
    "8": {
      "fn": null,
      "offset": [
        311,
        1825
      ],
      "op": "PUSH2",
      "path": "22",
      "value": "0x10"
    },
    "11": {
      "fn": null,
      "offset": [
        311,
        1825
      ],
      "op": "JUMPI",
      "path": "22"
    },
    "12": {
      "fn": null,
      "offset": [
        311,
        1825
      ],
      "op": "PUSH1",
      "path": "22",
      "value": "0x0"
    },
    "14": {
      "fn": null,
      "offset": [
        311,
        1825
      ],
      "op": "DUP1",
      "path": "22"
    },
    "15": {
      "dev": "Cannot send ether to nonpayable function",
      "fn": null,
      "offset": [
        311,
        1825
      ],
      "op": "REVERT",
      "path": "22"
    },
    "16": {
      "fn": null,
      "offset": [
        311,
        1825
      ],
      "op": "JUMPDEST",
      "path": "22"
    },
    "17": {
      "fn": null,
      "offset": [
        311,
        1825
      ],
      "op": "POP",
      "path": "22"
    },
    "18": {
      "fn": null,
      "offset": [
        311,
        1825
      ],
      "op": "PUSH1",
      "path": "22",
      "value": "0x4"
    },
    "20": {
      "fn": null,
      "offset": [
        311,
        1825
      ],
      "op": "CALLDATASIZE",
      "path": "22"
    },
    "21": {
      "fn": null,
      "offset": [
        311,
        1825
      ],
      "op": "LT",
      "path": "22"
    },
    "22": {
      "fn": null,
      "offset": [
        311,
        1825
      ],
      "op": "PUSH2",
      "path": "22",
      "value": "0x2B"
    },
    "25": {
      "fn": null,
      "offset": [
        311,
        1825
      ],
      "op": "JUMPI",
      "path": "22"
    },
    "26": {
      "fn": null,
      "offset": [
        311,
        1825
      ],
      "op": "PUSH1",
      "path": "22",
      "value": "0x0"
    },
    "28": {
      "fn": null,
      "offset": [
        311,
        1825
      ],
      "op": "CALLDATALOAD",
      "path": "22"
    },
    "29": {
      "fn": null,
      "offset": [
        311,
        1825
      ],
      "op": "PUSH1",
      "path": "22",
      "value": "0xE0"
    },
    "31": {
      "fn": null,
      "offset": [
        311,
        1825
      ],
      "op": "SHR",
      "path": "22"
    },
    "32": {
      "fn": null,
      "offset": [
        311,
        1825
      ],
      "op": "DUP1",
      "path": "22"
    },
    "33": {
      "fn": null,
      "offset": [
        311,
        1825
      ],
      "op": "PUSH4",
      "path": "22",
      "value": "0xC4D66DE8"
    },
    "38": {
      "fn": null,
      "offset": [
        311,
        1825
      ],
      "op": "EQ",
      "path": "22"
    },
    "39": {
      "fn": null,
      "offset": [
        311,
        1825
      ],
      "op": "PUSH2",
      "path": "22",
      "value": "0x30"
    },
    "42": {
      "fn": null,
      "offset": [
        311,
        1825
      ],
      "op": "JUMPI",
      "path": "22"
    },
    "43": {
      "fn": null,
      "offset": [
        311,
        1825
      ],
      "op": "JUMPDEST",
      "path": "22"
    },
    "44": {
      "fn": null,
      "offset": [
        311,
        1825
      ],
      "op": "PUSH1",
      "path": "22",
      "value": "0x0"
    },
    "46": {
      "fn": null,
      "offset": [
        311,
        1825
      ],
      "op": "DUP1",
      "path": "22"
    },
    "47": {
      "first_revert": true,
      "fn": null,
      "offset": [
        311,
        1825
      ],
      "op": "REVERT",
      "path": "22"
    },
    "48": {
      "fn": "CoreController.initialize",
      "offset": [
        1143,
        1375
      ],
      "op": "JUMPDEST",
      "path": "22"
    },
    "49": {
      "fn": "CoreController.initialize",
      "offset": [
        1143,
        1375
      ],
      "op": "PUSH2",
      "path": "22",
      "value": "0x43"
    },
    "52": {
      "fn": "CoreController.initialize",
      "offset": [
        1143,
        1375
      ],
      "op": "PUSH2",
      "path": "22",
      "value": "0x3E"
    },
    "55": {
      "fn": "CoreController.initialize",
      "offset": [
        1143,
        1375
      ],
      "op": "CALLDATASIZE",
      "path": "22"
    },
    "56": {
      "fn": "CoreController.initialize",
      "offset": [
        1143,
        1375
      ],
      "op": "PUSH1",
      "path": "22",
      "value": "0x4"
    },
    "58": {
      "fn": "CoreController.initialize",
      "offset": [
        1143,
        1375
      ],
      "op": "PUSH2",
      "path": "22",
      "value": "0x337"
    },
    "61": {
      "fn": "CoreController.initialize",
      "jump": "i",
      "offset": [
        1143,
        1375
      ],
      "op": "JUMP",
      "path": "22"
    },
    "62": {
      "fn": "CoreController.initialize",
      "offset": [
        1143,
        1375
      ],
      "op": "JUMPDEST",
      "path": "22"
    },
    "63": {
      "fn": "CoreController.initialize",
      "offset": [
        1143,
        1375
      ],
      "op": "PUSH2",
      "path": "22",
      "value": "0x45"
    },
    "66": {
      "fn": "CoreController.initialize",
      "jump": "i",
      "offset": [
        1143,
        1375
      ],
      "op": "JUMP",
      "path": "22"
    },
    "67": {
      "fn": "CoreController.initialize",
      "offset": [
        1143,
        1375
      ],
      "op": "JUMPDEST",
      "path": "22"
    },
    "68": {
      "fn": "CoreController.initialize",
      "offset": [
        1143,
        1375
      ],
      "op": "STOP",
      "path": "22"
    },
    "69": {
      "fn": "CoreController.initialize",
      "offset": [
        1143,
        1375
      ],
      "op": "JUMPDEST",
      "path": "22"
    },
    "70": {
      "offset": [
        3100,
        3119
      ],
      "op": "PUSH1",
      "path": "1",
      "value": "0x0"
    },
    "72": {
      "offset": [
        3123,
        3136
      ],
      "op": "SLOAD",
      "path": "1"
    },
    "73": {
      "fn": "CoreController.initialize",
      "offset": [
        3123,
        3136
      ],
      "op": "PUSH2",
      "path": "1",
      "value": "0x100"
    },
    "76": {
      "fn": "CoreController.initialize",
      "offset": [
        3123,
        3136
      ],
      "op": "SWAP1",
      "path": "1"
    },
    "77": {
      "fn": "CoreController.initialize",
      "offset": [
        3123,
        3136
      ],
      "op": "DIV",
      "path": "1"
    },
    "78": {
      "fn": "CoreController.initialize",
      "offset": [
        3123,
        3136
      ],
      "op": "PUSH1",
      "path": "1",
      "value": "0xFF"
    },
    "80": {
      "fn": "CoreController.initialize",
      "offset": [
        3123,
        3136
      ],
      "op": "AND",
      "path": "1"
    },
    "81": {
      "offset": [
        3122,
        3136
      ],
      "op": "ISZERO",
      "path": "1"
    },
    "82": {
      "fn": "CoreController.initialize",
      "offset": [
        3122,
        3136
      ],
      "op": "DUP1",
      "path": "1"
    },
    "83": {
      "offset": [
        3168,
        3202
      ],
      "op": "DUP1",
      "path": "1"
    },
    "84": {
      "fn": "CoreController.initialize",
      "offset": [
        3168,
        3202
      ],
      "op": "ISZERO",
      "path": "1"
    },
    "85": {
      "fn": "CoreController.initialize",
      "offset": [
        3168,
        3202
      ],
      "op": "PUSH2",
      "path": "1",
      "value": "0x65"
    },
    "88": {
      "fn": "CoreController.initialize",
      "offset": [
        3168,
        3202
      ],
      "op": "JUMPI",
      "path": "1"
    },
    "89": {
      "op": "POP"
    },
    "90": {
      "offset": [
        3186,
        3198
      ],
      "op": "PUSH1",
      "path": "1",
      "value": "0x0"
    },
    "92": {
      "fn": "CoreController.initialize",
      "offset": [
        3186,
        3198
      ],
      "op": "SLOAD",
      "path": "1"
    },
    "93": {
      "offset": [
        3201,
        3202
      ],
      "op": "PUSH1",
      "path": "1",
      "value": "0x1"
    },
    "95": {
      "offset": [
        3186,
        3198
      ],
      "op": "PUSH1",
      "path": "1",
      "value": "0xFF"
    },
    "97": {
      "fn": "CoreController.initialize",
      "offset": [
        3186,
        3198
      ],
      "op": "SWAP1",
      "path": "1"
    },
    "98": {
      "fn": "CoreController.initialize",
      "offset": [
        3186,
        3198
      ],
      "op": "SWAP2",
      "path": "1"
    },
    "99": {
      "fn": "CoreController.initialize",
      "offset": [
        3186,
        3198
      ],
      "op": "AND",
      "path": "1"
    },
    "100": {
      "offset": [
        3186,
        3202
      ],
      "op": "LT",
      "path": "1"
    },
    "101": {
      "offset": [
        3168,
        3202
      ],
      "op": "JUMPDEST",
      "path": "1"
    },
    "102": {
      "offset": [
        3167,
        3264
      ],
      "op": "DUP1",
      "path": "1"
    },
    "103": {
      "fn": "CoreController.initialize",
      "offset": [
        3167,
        3264
      ],
      "op": "PUSH2",
      "path": "1",
      "value": "0x86"
    },
    "106": {
      "offset": [
        3167,
        3264
      ],
      "op": "JUMPI",
      "path": "1"
    },
    "107": {
      "fn": "CoreController.initialize",
      "offset": [
        3167,
        3264
      ],
      "op": "POP",
      "path": "1"
    },
    "108": {
      "offset": [
        3209,
        3242
      ],
      "op": "PUSH2",
      "path": "1",
      "value": "0x74"
    },
    "111": {
      "offset": [
        3236,
        3240
      ],
      "op": "ADDRESS",
      "path": "1"
    },
    "112": {
      "offset": [
        3209,
        3227
      ],
      "op": "PUSH2",
      "path": "1",
      "value": "0x1CF"
    },
    "115": {
      "jump": "i",
      "offset": [
        3209,
        3242
      ],
      "op": "JUMP",
      "path": "1"
    },
    "116": {
      "branch": 8,
      "fn": "CoreController.initialize",
      "offset": [
        3209,
        3242
      ],
      "op": "JUMPDEST",
      "path": "1"
    },
    "117": {
      "offset": [
        3208,
        3242
      ],
      "op": "ISZERO",
      "path": "1"
    },
    "118": {
      "offset": [
        3208,
        3263
      ],
      "op": "DUP1",
      "path": "1"
    },
    "119": {
      "fn": "CoreController.initialize",
      "offset": [
        3208,
        3263
      ],
      "op": "ISZERO",
      "path": "1"
    },
    "120": {
      "fn": "CoreController.initialize",
      "offset": [
        3208,
        3263
      ],
      "op": "PUSH2",
      "path": "1",
      "value": "0x86"
    },
    "123": {
      "branch": 8,
      "offset": [
        3208,
        3263
      ],
      "op": "JUMPI",
      "path": "1"
    },
    "124": {
      "op": "POP"
    },
    "125": {
      "offset": [
        3246,
        3258
      ],
      "op": "PUSH1",
      "path": "1",
      "value": "0x0"
    },
    "127": {
      "fn": "CoreController.initialize",
      "offset": [
        3246,
        3258
      ],
      "op": "SLOAD",
      "path": "1"
    },
    "128": {
      "fn": "CoreController.initialize",
      "offset": [
        3246,
        3258
      ],
      "op": "PUSH1",
      "path": "1",
      "value": "0xFF"
    },
    "130": {
      "fn": "CoreController.initialize",
      "offset": [
        3246,
        3258
      ],
      "op": "AND",
      "path": "1"
    },
    "131": {
      "fn": "CoreController.initialize",
      "offset": [
        3246,
        3258
      ],
      "op": "PUSH1",
      "path": "1",
      "value": "0x1"
    },
    "133": {
      "offset": [
        3246,
        3263
      ],
      "op": "EQ",
      "path": "1"
    },
    "134": {
      "offset": [
        3208,
        3263
      ],
      "op": "JUMPDEST",
      "path": "1"
    },
    "135": {
      "offset": [
        3146,
        3336
      ],
      "op": "PUSH2",
      "path": "1",
      "value": "0xEE"
    },
    "138": {
      "offset": [
        3146,
        3336
      ],
      "op": "JUMPI",
      "path": "1"
    },
    "139": {
      "fn": "CoreController.initialize",
      "offset": [
        3146,
        3336
      ],
      "op": "PUSH1",
      "path": "1",
      "value": "0x40"
    },
    "141": {
      "fn": "CoreController.initialize",
      "offset": [
        3146,
        3336
      ],
      "op": "MLOAD",
      "path": "1"
    },
    "142": {
      "op": "PUSH3",
      "value": "0x461BCD"
    },
    "146": {
      "op": "PUSH1",
      "value": "0xE5"
    },
    "148": {
      "op": "SHL"
    },
    "149": {
      "offset": [
        3146,
        3336
      ],
      "op": "DUP2",
      "path": "1"
    },
    "150": {
      "fn": "CoreController.initialize",
      "offset": [
        3146,
        3336
      ],
      "op": "MSTORE",
      "path": "1"
    },
    "151": {
      "op": "PUSH1",
      "value": "0x20"
    },
    "153": {
      "offset": [
        3146,
        3336
      ],
      "op": "PUSH1",
      "path": "1",
      "value": "0x4"
    },
    "155": {
      "fn": "CoreController.initialize",
      "offset": [
        3146,
        3336
      ],
      "op": "DUP3",
      "path": "1"
    },
    "156": {
      "fn": "CoreController.initialize",
      "offset": [
        3146,
        3336
      ],
      "op": "ADD",
      "path": "1"
    },
    "157": {
      "op": "MSTORE"
    },
    "158": {
      "op": "PUSH1",
      "value": "0x2E"
    },
    "160": {
      "op": "PUSH1",
      "value": "0x24"
    },
    "162": {
      "op": "DUP3"
    },
    "163": {
      "op": "ADD"
    },
    "164": {
      "op": "MSTORE"
    },
    "165": {
      "op": "PUSH32",
      "value": "0x496E697469616C697A61626C653A20636F6E747261637420697320616C726561"
    },
    "198": {
      "op": "PUSH1",
      "value": "0x44"
    },
    "200": {
      "op": "DUP3"
    },
    "201": {
      "op": "ADD"
    },
    "202": {
      "op": "MSTORE"
    },
    "203": {
      "op": "PUSH14",
      "value": "0x191E481A5B9A5D1A585B1A5E9959"
    },
    "218": {
      "op": "PUSH1",
      "value": "0x92"
    },
    "220": {
      "op": "SHL"
    },
    "221": {
      "op": "PUSH1",
      "value": "0x64"
    },
    "223": {
      "op": "DUP3"
    },
    "224": {
      "op": "ADD"
    },
    "225": {
      "op": "MSTORE"
    },
    "226": {
      "op": "PUSH1",
      "value": "0x84"
    },
    "228": {
      "op": "ADD"
    },
    "229": {
      "offset": [
        3146,
        3336
      ],
      "op": "JUMPDEST",
      "path": "1"
    },
    "230": {
      "fn": "CoreController.initialize",
      "offset": [
        3146,
        3336
      ],
      "op": "PUSH1",
      "path": "1",
      "value": "0x40"
    },
    "232": {
      "fn": "CoreController.initialize",
      "offset": [
        3146,
        3336
      ],
      "op": "MLOAD",
      "path": "1"
    },
    "233": {
      "fn": "CoreController.initialize",
      "offset": [
        3146,
        3336
      ],
      "op": "DUP1",
      "path": "1"
    },
    "234": {
      "fn": "CoreController.initialize",
      "offset": [
        3146,
        3336
      ],
      "op": "SWAP2",
      "path": "1"
    },
    "235": {
      "fn": "CoreController.initialize",
      "offset": [
        3146,
        3336
      ],
      "op": "SUB",
      "path": "1"
    },
    "236": {
      "fn": "CoreController.initialize",
      "offset": [
        3146,
        3336
      ],
      "op": "SWAP1",
      "path": "1"
    },
    "237": {
      "fn": "CoreController.initialize",
      "offset": [
        3146,
        3336
      ],
      "op": "REVERT",
      "optimizer_revert": true,
      "path": "1"
    },
    "238": {
      "fn": "CoreController.initialize",
      "offset": [
        3146,
        3336
      ],
      "op": "JUMPDEST",
      "path": "1"
    },
    "239": {
      "offset": [
        3346,
        3358
      ],
      "op": "PUSH1",
      "path": "1",
      "value": "0x0"
    },
    "241": {
      "offset": [
        3346,
        3362
      ],
      "op": "DUP1",
      "path": "1"
    },
    "242": {
      "fn": "CoreController.initialize",
      "offset": [
        3346,
        3362
      ],
      "op": "SLOAD",
      "path": "1"
    },
    "243": {
      "op": "PUSH1",
      "value": "0xFF"
    },
    "245": {
      "op": "NOT"
    },
    "246": {
      "offset": [
        3346,
        3362
      ],
      "op": "AND",
      "path": "1"
    },
    "247": {
      "offset": [
        3361,
        3362
      ],
      "op": "PUSH1",
      "path": "1",
      "value": "0x1"
    },
    "249": {
      "offset": [
        3346,
        3362
      ],
      "op": "OR",
      "path": "1"
    },
    "250": {
      "fn": "CoreController.initialize",
      "offset": [
        3346,
        3362
      ],
      "op": "SWAP1",
      "path": "1"
    },
    "251": {
      "fn": "CoreController.initialize",
      "offset": [
        3346,
        3362
      ],
      "op": "SSTORE",
      "path": "1"
    },
    "252": {
      "offset": [
        3372,
        3437
      ],
      "op": "DUP1",
      "path": "1"
    },
    "253": {
      "fn": "CoreController.initialize",
      "offset": [
        3372,
        3437
      ],
      "op": "ISZERO",
      "path": "1"
    },
    "254": {
      "fn": "CoreController.initialize",
      "offset": [
        3372,
        3437
      ],
      "op": "PUSH2",
      "path": "1",
      "value": "0x111"
    },
    "257": {
      "fn": "CoreController.initialize",
      "offset": [
        3372,
        3437
      ],
      "op": "JUMPI",
      "path": "1"
    },
    "258": {
      "offset": [
        3406,
        3419
      ],
      "op": "PUSH1",
      "path": "1",
      "value": "0x0"
    },
    "260": {
      "offset": [
        3406,
        3426
      ],
      "op": "DUP1",
      "path": "1"
    },
    "261": {
      "fn": "CoreController.initialize",
      "offset": [
        3406,
        3426
      ],
      "op": "SLOAD",
      "path": "1"
    },
    "262": {
      "op": "PUSH2",
      "value": "0xFF00"
    },
    "265": {
      "op": "NOT"
    },
    "266": {
      "offset": [
        3406,
        3426
      ],
      "op": "AND",
      "path": "1"
    },
    "267": {
      "fn": "CoreController.initialize",
      "offset": [
        3406,
        3426
      ],
      "op": "PUSH2",
      "path": "1",
      "value": "0x100"
    },
    "270": {
      "fn": "CoreController.initialize",
      "offset": [
        3406,
        3426
      ],
      "op": "OR",
      "path": "1"
    },
    "271": {
      "fn": "CoreController.initialize",
      "offset": [
        3406,
        3426
      ],
      "op": "SWAP1",
      "path": "1"
    },
    "272": {
      "fn": "CoreController.initialize",
      "offset": [
        3406,
        3426
      ],
      "op": "SSTORE",
      "path": "1"
    },
    "273": {
      "offset": [
        3372,
        3437
      ],
      "op": "JUMPDEST",
      "path": "1"
    },
    "274": {
      "fn": "CoreController.initialize",
      "offset": [
        1210,
        1219
      ],
      "op": "PUSH1",
      "path": "22",
      "statement": 0,
      "value": "0x0"
    },
    "276": {
      "fn": "CoreController.initialize",
      "offset": [
        1210,
        1241
      ],
      "op": "DUP1",
      "path": "22"
    },
    "277": {
      "fn": "CoreController.initialize",
      "offset": [
        1210,
        1241
      ],
      "op": "SLOAD",
      "path": "22"
    },
    "278": {
      "op": "PUSH3",
      "value": "0x10000"
    },
    "282": {
      "op": "PUSH1",
      "value": "0x1"
    },
    "284": {
      "op": "PUSH1",
      "value": "0xB0"
    },
    "286": {
      "op": "SHL"
    },
    "287": {
      "op": "SUB"
    },
    "288": {
      "op": "NOT"
    },
    "289": {
      "fn": "CoreController.initialize",
      "offset": [
        1210,
        1241
      ],
      "op": "AND",
      "path": "22"
    },
    "290": {
      "fn": "CoreController.initialize",
      "offset": [
        1210,
        1241
      ],
      "op": "PUSH3",
      "path": "22",
      "value": "0x10000"
    },
    "294": {
      "op": "PUSH1",
      "value": "0x1"
    },
    "296": {
      "op": "PUSH1",
      "value": "0x1"
    },
    "298": {
      "op": "PUSH1",
      "value": "0xA0"
    },
    "300": {
      "op": "SHL"
    },
    "301": {
      "op": "SUB"
    },
    "302": {
      "fn": "CoreController.initialize",
      "offset": [
        1210,
        1241
      ],
      "op": "DUP6",
      "path": "22"
    },
    "303": {
      "fn": "CoreController.initialize",
      "offset": [
        1210,
        1241
      ],
      "op": "AND",
      "path": "22"
    },
    "304": {
      "fn": "CoreController.initialize",
      "offset": [
        1210,
        1241
      ],
      "op": "MUL",
      "path": "22"
    },
    "305": {
      "fn": "CoreController.initialize",
      "offset": [
        1210,
        1241
      ],
      "op": "OR",
      "path": "22"
    },
    "306": {
      "fn": "CoreController.initialize",
      "offset": [
        1210,
        1241
      ],
      "op": "SWAP1",
      "path": "22"
    },
    "307": {
      "fn": "CoreController.initialize",
      "offset": [
        1210,
        1241
      ],
      "op": "SSTORE",
      "path": "22"
    },
    "308": {
      "fn": "CoreController.initialize",
      "offset": [
        1255,
        1265
      ],
      "op": "PUSH2",
      "path": "22",
      "value": "0x13B"
    },
    "311": {
      "fn": "CoreController._getName",
      "offset": [
        1431,
        1438
      ],
      "op": "PUSH1",
      "path": "22",
      "value": "0x0"
    },
    "313": {
      "fn": "CoreController._getName",
      "offset": [
        1381,
        1454
      ],
      "op": "SWAP1",
      "path": "22"
    },
    "314": {
      "fn": "CoreController._getName",
      "offset": [
        1381,
        1454
      ],
      "op": "JUMP",
      "path": "22"
    },
    "315": {
      "fn": "CoreController.initialize",
      "offset": [
        1255,
        1265
      ],
      "op": "JUMPDEST",
      "path": "22"
    },
    "316": {
      "op": "PUSH6",
      "value": "0x416363657373"
    },
    "323": {
      "op": "PUSH1",
      "value": "0xD0"
    },
    "325": {
      "op": "SHL"
    },
    "326": {
      "branch": 6,
      "fn": "CoreController.initialize",
      "offset": [
        1255,
        1277
      ],
      "op": "EQ",
      "path": "22"
    },
    "327": {
      "fn": "CoreController.initialize",
      "offset": [
        1251,
        1332
      ],
      "op": "PUSH2",
      "path": "22",
      "value": "0x17D"
    },
    "330": {
      "branch": 6,
      "fn": "CoreController.initialize",
      "offset": [
        1251,
        1332
      ],
      "op": "JUMPI",
      "path": "22"
    },
    "331": {
      "fn": "CoreController.initialize",
      "offset": [
        1299,
        1328
      ],
      "op": "PUSH2",
      "path": "22",
      "statement": 1,
      "value": "0x15C"
    },
    "334": {
      "op": "PUSH6",
      "value": "0x416363657373"
    },
    "341": {
      "op": "PUSH1",
      "value": "0xD0"
    },
    "343": {
      "op": "SHL"
    },
    "344": {
      "fn": "CoreController.initialize",
      "offset": [
        1299,
        1318
      ],
      "op": "PUSH2",
      "path": "22",
      "value": "0x1E2"
    },
    "347": {
      "fn": "CoreController.initialize",
      "jump": "i",
      "offset": [
        1299,
        1328
      ],
      "op": "JUMP",
      "path": "22"
    },
    "348": {
      "fn": "CoreController.initialize",
      "offset": [
        1299,
        1328
      ],
      "op": "JUMPDEST",
      "path": "22"
    },
    "349": {
      "fn": "CoreController.initialize",
      "offset": [
        1281,
        1288
      ],
      "op": "PUSH1",
      "path": "22",
      "value": "0x1"
    },
    "351": {
      "fn": "CoreController.initialize",
      "offset": [
        1281,
        1329
      ],
      "op": "DUP1",
      "path": "22"
    },
    "352": {
      "fn": "CoreController.initialize",
      "offset": [
        1281,
        1329
      ],
      "op": "SLOAD",
      "path": "22"
    },
    "353": {
      "op": "PUSH1",
      "value": "0x1"
    },
    "355": {
      "op": "PUSH1",
      "value": "0x1"
    },
    "357": {
      "op": "PUSH1",
      "value": "0xA0"
    },
    "359": {
      "op": "SHL"
    },
    "360": {
      "op": "SUB"
    },
    "361": {
      "op": "NOT"
    },
    "362": {
      "fn": "CoreController.initialize",
      "offset": [
        1281,
        1329
      ],
      "op": "AND",
      "path": "22"
    },
    "363": {
      "op": "PUSH1",
      "value": "0x1"
    },
    "365": {
      "op": "PUSH1",
      "value": "0x1"
    },
    "367": {
      "op": "PUSH1",
      "value": "0xA0"
    },
    "369": {
      "op": "SHL"
    },
    "370": {
      "op": "SUB"
    },
    "371": {
      "fn": "CoreController.initialize",
      "offset": [
        1281,
        1329
      ],
      "op": "SWAP3",
      "path": "22"
    },
    "372": {
      "fn": "CoreController.initialize",
      "offset": [
        1281,
        1329
      ],
      "op": "SWAP1",
      "path": "22"
    },
    "373": {
      "fn": "CoreController.initialize",
      "offset": [
        1281,
        1329
      ],
      "op": "SWAP3",
      "path": "22"
    },
    "374": {
      "fn": "CoreController.initialize",
      "offset": [
        1281,
        1329
      ],
      "op": "AND",
      "path": "22"
    },
    "375": {
      "fn": "CoreController.initialize",
      "offset": [
        1281,
        1329
      ],
      "op": "SWAP2",
      "path": "22"
    },
    "376": {
      "fn": "CoreController.initialize",
      "offset": [
        1281,
        1329
      ],
      "op": "SWAP1",
      "path": "22"
    },
    "377": {
      "fn": "CoreController.initialize",
      "offset": [
        1281,
        1329
      ],
      "op": "SWAP2",
      "path": "22"
    },
    "378": {
      "fn": "CoreController.initialize",
      "offset": [
        1281,
        1329
      ],
      "op": "OR",
      "path": "22"
    },
    "379": {
      "fn": "CoreController.initialize",
      "offset": [
        1281,
        1329
      ],
      "op": "SWAP1",
      "path": "22"
    },
    "380": {
      "fn": "CoreController.initialize",
      "offset": [
        1281,
        1329
      ],
      "op": "SSTORE",
      "path": "22"
    },
    "381": {
      "fn": "CoreController.initialize",
      "offset": [
        1251,
        1332
      ],
      "op": "JUMPDEST",
      "path": "22"
    },
    "382": {
      "fn": "CoreController.initialize",
      "offset": [
        1350,
        1368
      ],
      "op": "PUSH2",
      "path": "22",
      "statement": 2,
      "value": "0x185"
    },
    "385": {
      "fn": "CoreController.initialize",
      "offset": [
        1350,
        1366
      ],
      "op": "PUSH2",
      "path": "22",
      "value": "0x2CA"
    },
    "388": {
      "fn": "CoreController.initialize",
      "jump": "i",
      "offset": [
        1350,
        1368
      ],
      "op": "JUMP",
      "path": "22"
    },
    "389": {
      "fn": "CoreController.initialize",
      "offset": [
        1350,
        1368
      ],
      "op": "JUMPDEST",
      "path": "22"
    },
    "390": {
      "offset": [
        3461,
        3475
      ],
      "op": "DUP1",
      "path": "1"
    },
    "391": {
      "offset": [
        3457,
        3556
      ],
      "op": "ISZERO",
      "path": "1"
    },
    "392": {
      "fn": "CoreController.initialize",
      "offset": [
        3457,
        3556
      ],
      "op": "PUSH2",
      "path": "1",
      "value": "0x1CB"
    },
    "395": {
      "offset": [
        3457,
        3556
      ],
      "op": "JUMPI",
      "path": "1"
    },
    "396": {
      "offset": [
        3507,
        3512
      ],
      "op": "PUSH1",
      "path": "1",
      "value": "0x0"
    },
    "398": {
      "offset": [
        3491,
        3512
      ],
      "op": "DUP1",
      "path": "1"
    },
    "399": {
      "fn": "CoreController.initialize",
      "offset": [
        3491,
        3512
      ],
      "op": "SLOAD",
      "path": "1"
    },
    "400": {
      "op": "PUSH2",
      "value": "0xFF00"
    },
    "403": {
      "op": "NOT"
    },
    "404": {
      "offset": [
        3491,
        3512
      ],
      "op": "AND",
      "path": "1"
    },
    "405": {
      "fn": "CoreController.initialize",
      "offset": [
        3491,
        3512
      ],
      "op": "SWAP1",
      "path": "1"
    },
    "406": {
      "fn": "CoreController.initialize",
      "offset": [
        3491,
        3512
      ],
      "op": "SSTORE",
      "path": "1"
    },
    "407": {
      "offset": [
        3531,
        3545
      ],
      "op": "PUSH1",
      "path": "1",
      "value": "0x40"
    },
    "409": {
      "fn": "CoreController.initialize",
      "offset": [
        3531,
        3545
      ],
      "op": "MLOAD",
      "path": "1"
    },
    "410": {
      "op": "PUSH1",
      "value": "0x1"
    },
    "412": {
      "op": "DUP2"
    },
    "413": {
      "op": "MSTORE"
    },
    "414": {
      "offset": [
        3531,
        3545
      ],
      "op": "PUSH32",
      "path": "1",
      "value": "0x7F26B83FF96E1F2B6A682F133852F6798A09C465DA95921460CEFB3847402498"
    },
    "447": {
      "fn": "CoreController.initialize",
      "offset": [
        3531,
        3545
      ],
      "op": "SWAP1",
      "path": "1"
    },
    "448": {
      "op": "PUSH1",
      "value": "0x20"
    },
    "450": {
      "op": "ADD"
    },
    "451": {
      "offset": [
        3531,
        3545
      ],
      "op": "PUSH1",
      "path": "1",
      "value": "0x40"
    },
    "453": {
      "fn": "CoreController.initialize",
      "offset": [
        3531,
        3545
      ],
      "op": "MLOAD",
      "path": "1"
    },
    "454": {
      "fn": "CoreController.initialize",
      "offset": [
        3531,
        3545
      ],
      "op": "DUP1",
      "path": "1"
    },
    "455": {
      "fn": "CoreController.initialize",
      "offset": [
        3531,
        3545
      ],
      "op": "SWAP2",
      "path": "1"
    },
    "456": {
      "fn": "CoreController.initialize",
      "offset": [
        3531,
        3545
      ],
      "op": "SUB",
      "path": "1"
    },
    "457": {
      "fn": "CoreController.initialize",
      "offset": [
        3531,
        3545
      ],
      "op": "SWAP1",
      "path": "1"
    },
    "458": {
      "fn": "CoreController.initialize",
      "offset": [
        3531,
        3545
      ],
      "op": "LOG1",
      "path": "1"
    },
    "459": {
      "offset": [
        3457,
        3556
      ],
      "op": "JUMPDEST",
      "path": "1"
    },
    "460": {
      "fn": "CoreController.initialize",
      "offset": [
        1143,
        1375
      ],
      "op": "POP",
      "path": "22"
    },
    "461": {
      "fn": "CoreController.initialize",
      "offset": [
        1143,
        1375
      ],
      "op": "POP",
      "path": "22"
    },
    "462": {
      "fn": "CoreController.initialize",
      "jump": "o",
      "offset": [
        1143,
        1375
      ],
      "op": "JUMP",
      "path": "22"
    },
    "463": {
      "fn": "Address.isContract",
      "offset": [
        1175,
        1495
      ],
      "op": "JUMPDEST",
      "path": "10"
    },
    "464": {
      "op": "PUSH1",
      "value": "0x1"
    },
    "466": {
      "op": "PUSH1",
      "value": "0x1"
    },
    "468": {
      "op": "PUSH1",
      "value": "0xA0"
    },
    "470": {
      "op": "SHL"
    },
    "471": {
      "op": "SUB"
    },
    "472": {
      "fn": "Address.isContract",
      "offset": [
        1465,
        1484
      ],
      "op": "DUP2",
      "path": "10",
      "statement": 3
    },
    "473": {
      "fn": "Address.isContract",
      "offset": [
        1465,
        1484
      ],
      "op": "AND",
      "path": "10"
    },
    "474": {
      "fn": "Address.isContract",
      "offset": [
        1465,
        1484
      ],
      "op": "EXTCODESIZE",
      "path": "10"
    },
    "475": {
      "fn": "Address.isContract",
      "offset": [
        1465,
        1488
      ],
      "op": "ISZERO",
      "path": "10"
    },
    "476": {
      "fn": "Address.isContract",
      "offset": [
        1465,
        1488
      ],
      "op": "ISZERO",
      "path": "10"
    },
    "477": {
      "fn": "Address.isContract",
      "offset": [
        1175,
        1495
      ],
      "op": "JUMPDEST",
      "path": "10"
    },
    "478": {
      "fn": "Address.isContract",
      "offset": [
        1175,
        1495
      ],
      "op": "SWAP2",
      "path": "10"
    },
    "479": {
      "fn": "Address.isContract",
      "offset": [
        1175,
        1495
      ],
      "op": "SWAP1",
      "path": "10"
    },
    "480": {
      "fn": "Address.isContract",
      "offset": [
        1175,
        1495
      ],
      "op": "POP",
      "path": "10"
    },
    "481": {
      "fn": "Address.isContract",
      "jump": "o",
      "offset": [
        1175,
        1495
      ],
      "op": "JUMP",
      "path": "10"
    },
    "482": {
      "fn": "CoreController._getContractAddress",
      "offset": [
        1530,
        1823
      ],
      "op": "JUMPDEST",
      "path": "22"
    },
    "483": {
      "fn": "CoreController._getContractAddress",
      "offset": [
        1604,
        1627
      ],
      "op": "PUSH1",
      "path": "22",
      "value": "0x0"
    },
    "485": {
      "fn": "CoreController._getContractAddress",
      "offset": [
        1658,
        1667
      ],
      "op": "DUP1",
      "path": "22",
      "statement": 4
    },
    "486": {
      "fn": "CoreController._getContractAddress",
      "offset": [
        1658,
        1667
      ],
      "op": "SLOAD",
      "path": "22"
    },
    "487": {
      "fn": "CoreController._getContractAddress",
      "offset": [
        1658,
        1693
      ],
      "op": "PUSH1",
      "path": "22",
      "value": "0x40"
    },
    "489": {
      "fn": "CoreController._getContractAddress",
      "offset": [
        1658,
        1693
      ],
      "op": "MLOAD",
      "path": "22"
    },
    "490": {
      "op": "PUSH4",
      "value": "0x1C2D8FB3"
    },
    "495": {
      "op": "PUSH1",
      "value": "0xE3"
    },
    "497": {
      "op": "SHL"
    },
    "498": {
      "fn": "CoreController._getContractAddress",
      "offset": [
        1658,
        1693
      ],
      "op": "DUP2",
      "path": "22"
    },
    "499": {
      "fn": "CoreController._getContractAddress",
      "offset": [
        1658,
        1693
      ],
      "op": "MSTORE",
      "path": "22"
    },
    "500": {
      "fn": "CoreController._getContractAddress",
      "offset": [
        1658,
        1693
      ],
      "op": "PUSH1",
      "path": "22",
      "value": "0x4"
    },
    "502": {
      "fn": "CoreController._getContractAddress",
      "offset": [
        1658,
        1693
      ],
      "op": "DUP2",
      "path": "22"
    },
    "503": {
      "fn": "CoreController._getContractAddress",
      "offset": [
        1658,
        1693
      ],
      "op": "ADD",
      "path": "22"
    },
    "504": {
      "op": "DUP5"
    },
    "505": {
      "op": "SWAP1"
    },
    "506": {
      "op": "MSTORE"
    },
    "507": {
      "fn": "CoreController._getContractAddress",
      "offset": [
        1658,
        1667
      ],
      "op": "PUSH3",
      "path": "22",
      "value": "0x10000"
    },
    "511": {
      "fn": "CoreController._getContractAddress",
      "offset": [
        1658,
        1667
      ],
      "op": "SWAP1",
      "path": "22"
    },
    "512": {
      "fn": "CoreController._getContractAddress",
      "offset": [
        1658,
        1667
      ],
      "op": "SWAP2",
      "path": "22"
    },
    "513": {
      "fn": "CoreController._getContractAddress",
      "offset": [
        1658,
        1667
      ],
      "op": "DIV",
      "path": "22"
    },
    "514": {
      "op": "PUSH1",
      "value": "0x1"
    },
    "516": {
      "op": "PUSH1",
      "value": "0x1"
    },
    "518": {
      "op": "PUSH1",
      "value": "0xA0"
    },
    "520": {
      "op": "SHL"
    },
    "521": {
      "op": "SUB"
    },
    "522": {
      "fn": "CoreController._getContractAddress",
      "offset": [
        1658,
        1667
      ],
      "op": "AND",
      "path": "22"
    },
    "523": {
      "fn": "CoreController._getContractAddress",
      "offset": [
        1658,
        1667
      ],
      "op": "SWAP1",
      "path": "22"
    },
    "524": {
      "fn": "CoreController._getContractAddress",
      "offset": [
        1658,
        1679
      ],
      "op": "PUSH4",
      "path": "22",
      "value": "0xE16C7D98"
    },
    "529": {
      "fn": "CoreController._getContractAddress",
      "offset": [
        1658,
        1679
      ],
      "op": "SWAP1",
      "path": "22"
    },
    "530": {
      "op": "PUSH1",
      "value": "0x24"
    },
    "532": {
      "op": "ADD"
    },
    "533": {
      "fn": "CoreController._getContractAddress",
      "offset": [
        1658,
        1693
      ],
      "op": "PUSH1",
      "path": "22",
      "value": "0x20"
    },
    "535": {
      "fn": "CoreController._getContractAddress",
      "offset": [
        1658,
        1693
      ],
      "op": "PUSH1",
      "path": "22",
      "value": "0x40"
    },
    "537": {
      "fn": "CoreController._getContractAddress",
      "offset": [
        1658,
        1693
      ],
      "op": "MLOAD",
      "path": "22"
    },
    "538": {
      "fn": "CoreController._getContractAddress",
      "offset": [
        1658,
        1693
      ],
      "op": "DUP1",
      "path": "22"
    },
    "539": {
      "fn": "CoreController._getContractAddress",
      "offset": [
        1658,
        1693
      ],
      "op": "DUP4",
      "path": "22"
    },
    "540": {
      "fn": "CoreController._getContractAddress",
      "offset": [
        1658,
        1693
      ],
      "op": "SUB",
      "path": "22"
    },
    "541": {
      "fn": "CoreController._getContractAddress",
      "offset": [
        1658,
        1693
      ],
      "op": "DUP2",
      "path": "22"
    },
    "542": {
      "fn": "CoreController._getContractAddress",
      "offset": [
        1658,
        1693
      ],
      "op": "DUP7",
      "path": "22"
    },
    "543": {
      "fn": "CoreController._getContractAddress",
      "offset": [
        1658,
        1693
      ],
      "op": "DUP1",
      "path": "22"
    },
    "544": {
      "fn": "CoreController._getContractAddress",
      "offset": [
        1658,
        1693
      ],
      "op": "EXTCODESIZE",
      "path": "22"
    },
    "545": {
      "fn": "CoreController._getContractAddress",
      "offset": [
        1658,
        1693
      ],
      "op": "ISZERO",
      "path": "22"
    },
    "546": {
      "fn": "CoreController._getContractAddress",
      "offset": [
        1658,
        1693
      ],
      "op": "DUP1",
      "path": "22"
    },
    "547": {
      "fn": "CoreController._getContractAddress",
      "offset": [
        1658,
        1693
      ],
      "op": "ISZERO",
      "path": "22"
    },
    "548": {
      "fn": "CoreController._getContractAddress",
      "offset": [
        1658,
        1693
      ],
      "op": "PUSH2",
      "path": "22",
      "value": "0x22C"
    },
    "551": {
      "fn": "CoreController._getContractAddress",
      "offset": [
        1658,
        1693
      ],
      "op": "JUMPI",
      "path": "22"
    },
    "552": {
      "fn": "CoreController._getContractAddress",
      "offset": [
        1658,
        1693
      ],
      "op": "PUSH1",
      "path": "22",
      "value": "0x0"
    },
    "554": {
      "fn": "CoreController._getContractAddress",
      "offset": [
        1658,
        1693
      ],
      "op": "DUP1",
      "path": "22"
    },
    "555": {
      "fn": "CoreController._getContractAddress",
      "offset": [
        1658,
        1693
      ],
      "op": "REVERT",
      "path": "22"
    },
    "556": {
      "fn": "CoreController._getContractAddress",
      "offset": [
        1658,
        1693
      ],
      "op": "JUMPDEST",
      "path": "22"
    },
    "557": {
      "fn": "CoreController._getContractAddress",
      "offset": [
        1658,
        1693
      ],
      "op": "POP",
      "path": "22"
    },
    "558": {
      "fn": "CoreController._getContractAddress",
      "offset": [
        1658,
        1693
      ],
      "op": "GAS",
      "path": "22"
    },
    "559": {
      "fn": "CoreController._getContractAddress",
      "offset": [
        1658,
        1693
      ],
      "op": "STATICCALL",
      "path": "22"
    },
    "560": {
      "fn": "CoreController._getContractAddress",
      "offset": [
        1658,
        1693
      ],
      "op": "ISZERO",
      "path": "22"
    },
    "561": {
      "fn": "CoreController._getContractAddress",
      "offset": [
        1658,
        1693
      ],
      "op": "DUP1",
      "path": "22"
    },
    "562": {
      "fn": "CoreController._getContractAddress",
      "offset": [
        1658,
        1693
      ],
      "op": "ISZERO",
      "path": "22"
    },
    "563": {
      "fn": "CoreController._getContractAddress",
      "offset": [
        1658,
        1693
      ],
      "op": "PUSH2",
      "path": "22",
      "value": "0x240"
    },
    "566": {
      "fn": "CoreController._getContractAddress",
      "offset": [
        1658,
        1693
      ],
      "op": "JUMPI",
      "path": "22"
    },
    "567": {
      "fn": "CoreController._getContractAddress",
      "offset": [
        1658,
        1693
      ],
      "op": "RETURNDATASIZE",
      "path": "22"
    },
    "568": {
      "fn": "CoreController._getContractAddress",
      "offset": [
        1658,
        1693
      ],
      "op": "PUSH1",
      "path": "22",
      "value": "0x0"
    },
    "570": {
      "fn": "CoreController._getContractAddress",
      "offset": [
        1658,
        1693
      ],
      "op": "DUP1",
      "path": "22"
    },
    "571": {
      "fn": "CoreController._getContractAddress",
      "offset": [
        1658,
        1693
      ],
      "op": "RETURNDATACOPY",
      "path": "22"
    },
    "572": {
      "fn": "CoreController._getContractAddress",
      "offset": [
        1658,
        1693
      ],
      "op": "RETURNDATASIZE",
      "path": "22"
    },
    "573": {
      "fn": "CoreController._getContractAddress",
      "offset": [
        1658,
        1693
      ],
      "op": "PUSH1",
      "path": "22",
      "value": "0x0"
    },
    "575": {
      "fn": "CoreController._getContractAddress",
      "offset": [
        1658,
        1693
      ],
      "op": "REVERT",
      "path": "22"
    },
    "576": {
      "fn": "CoreController._getContractAddress",
      "offset": [
        1658,
        1693
      ],
      "op": "JUMPDEST",
      "path": "22"
    },
    "577": {
      "fn": "CoreController._getContractAddress",
      "offset": [
        1658,
        1693
      ],
      "op": "POP",
      "path": "22"
    },
    "578": {
      "fn": "CoreController._getContractAddress",
      "offset": [
        1658,
        1693
      ],
      "op": "POP",
      "path": "22"
    },
    "579": {
      "fn": "CoreController._getContractAddress",
      "offset": [
        1658,
        1693
      ],
      "op": "POP",
      "path": "22"
    },
    "580": {
      "fn": "CoreController._getContractAddress",
      "offset": [
        1658,
        1693
      ],
      "op": "POP",
      "path": "22"
    },
    "581": {
      "fn": "CoreController._getContractAddress",
      "offset": [
        1658,
        1693
      ],
      "op": "PUSH1",
      "path": "22",
      "value": "0x40"
    },
    "583": {
      "fn": "CoreController._getContractAddress",
      "offset": [
        1658,
        1693
      ],
      "op": "MLOAD",
      "path": "22"
    },
    "584": {
      "fn": "CoreController._getContractAddress",
      "offset": [
        1658,
        1693
      ],
      "op": "RETURNDATASIZE",
      "path": "22"
    },
    "585": {
      "fn": "CoreController._getContractAddress",
      "offset": [
        1658,
        1693
      ],
      "op": "PUSH1",
      "path": "22",
      "value": "0x1F"
    },
    "587": {
      "fn": "CoreController._getContractAddress",
      "offset": [
        1658,
        1693
      ],
      "op": "NOT",
      "path": "22"
    },
    "588": {
      "fn": "CoreController._getContractAddress",
      "offset": [
        1658,
        1693
      ],
      "op": "PUSH1",
      "path": "22",
      "value": "0x1F"
    },
    "590": {
      "fn": "CoreController._getContractAddress",
      "offset": [
        1658,
        1693
      ],
      "op": "DUP3",
      "path": "22"
    },
    "591": {
      "fn": "CoreController._getContractAddress",
      "offset": [
        1658,
        1693
      ],
      "op": "ADD",
      "path": "22"
    },
    "592": {
      "fn": "CoreController._getContractAddress",
      "offset": [
        1658,
        1693
      ],
      "op": "AND",
      "path": "22"
    },
    "593": {
      "fn": "CoreController._getContractAddress",
      "offset": [
        1658,
        1693
      ],
      "op": "DUP3",
      "path": "22"
    },
    "594": {
      "fn": "CoreController._getContractAddress",
      "offset": [
        1658,
        1693
      ],
      "op": "ADD",
      "path": "22"
    },
    "595": {
      "fn": "CoreController._getContractAddress",
      "offset": [
        1658,
        1693
      ],
      "op": "DUP1",
      "path": "22"
    },
    "596": {
      "fn": "CoreController._getContractAddress",
      "offset": [
        1658,
        1693
      ],
      "op": "PUSH1",
      "path": "22",
      "value": "0x40"
    },
    "598": {
      "fn": "CoreController._getContractAddress",
      "offset": [
        1658,
        1693
      ],
      "op": "MSTORE",
      "path": "22"
    },
    "599": {
      "fn": "CoreController._getContractAddress",
      "offset": [
        1658,
        1693
      ],
      "op": "POP",
      "path": "22"
    },
    "600": {
      "fn": "CoreController._getContractAddress",
      "offset": [
        1658,
        1693
      ],
      "op": "DUP2",
      "path": "22"
    },
    "601": {
      "fn": "CoreController._getContractAddress",
      "offset": [
        1658,
        1693
      ],
      "op": "ADD",
      "path": "22"
    },
    "602": {
      "fn": "CoreController._getContractAddress",
      "offset": [
        1658,
        1693
      ],
      "op": "SWAP1",
      "path": "22"
    },
    "603": {
      "fn": "CoreController._getContractAddress",
      "offset": [
        1658,
        1693
      ],
      "op": "PUSH2",
      "path": "22",
      "value": "0x264"
    },
    "606": {
      "fn": "CoreController._getContractAddress",
      "offset": [
        1658,
        1693
      ],
      "op": "SWAP2",
      "path": "22"
    },
    "607": {
      "fn": "CoreController._getContractAddress",
      "offset": [
        1658,
        1693
      ],
      "op": "SWAP1",
      "path": "22"
    },
    "608": {
      "fn": "CoreController._getContractAddress",
      "offset": [
        1658,
        1693
      ],
      "op": "PUSH2",
      "path": "22",
      "value": "0x35A"
    },
    "611": {
      "fn": "CoreController._getContractAddress",
      "jump": "i",
      "offset": [
        1658,
        1693
      ],
      "op": "JUMP",
      "path": "22"
    },
    "612": {
      "fn": "CoreController._getContractAddress",
      "offset": [
        1658,
        1693
      ],
      "op": "JUMPDEST",
      "path": "22"
    },
    "613": {
      "fn": "CoreController._getContractAddress",
      "offset": [
        1640,
        1693
      ],
      "op": "SWAP1",
      "path": "22"
    },
    "614": {
      "op": "POP"
    },
    "615": {
      "op": "PUSH1",
      "value": "0x1"
    },
    "617": {
      "op": "PUSH1",
      "value": "0x1"
    },
    "619": {
      "op": "PUSH1",
      "value": "0xA0"
    },
    "621": {
      "op": "SHL"
    },
    "622": {
      "op": "SUB"
    },
    "623": {
      "fn": "CoreController._getContractAddress",
      "offset": [
        1724,
        1753
      ],
      "op": "DUP2",
      "path": "22",
      "statement": 5
    },
    "624": {
      "branch": 7,
      "fn": "CoreController._getContractAddress",
      "offset": [
        1724,
        1753
      ],
      "op": "AND",
      "path": "22"
    },
    "625": {
      "fn": "CoreController._getContractAddress",
      "offset": [
        1703,
        1816
      ],
      "op": "PUSH2",
      "path": "22",
      "value": "0x1DD"
    },
    "628": {
      "branch": 7,
      "fn": "CoreController._getContractAddress",
      "offset": [
        1703,
        1816
      ],
      "op": "JUMPI",
      "path": "22"
    },
    "629": {
      "fn": "CoreController._getContractAddress",
      "offset": [
        1703,
        1816
      ],
      "op": "PUSH1",
      "path": "22",
      "value": "0x40"
    },
    "631": {
      "fn": "CoreController._getContractAddress",
      "offset": [
        1703,
        1816
      ],
      "op": "MLOAD",
      "path": "22"
    },
    "632": {
      "op": "PUSH3",
      "value": "0x461BCD"
    },
    "636": {
      "op": "PUSH1",
      "value": "0xE5"
    },
    "638": {
      "op": "SHL"
    },
    "639": {
      "fn": "CoreController._getContractAddress",
      "offset": [
        1703,
        1816
      ],
      "op": "DUP2",
      "path": "22"
    },
    "640": {
      "fn": "CoreController._getContractAddress",
      "offset": [
        1703,
        1816
      ],
      "op": "MSTORE",
      "path": "22"
    },
    "641": {
      "op": "PUSH1",
      "value": "0x20"
    },
    "643": {
      "fn": "CoreController._getContractAddress",
      "offset": [
        1703,
        1816
      ],
      "op": "PUSH1",
      "path": "22",
      "value": "0x4"
    },
    "645": {
      "fn": "CoreController._getContractAddress",
      "offset": [
        1703,
        1816
      ],
      "op": "DUP3",
      "path": "22"
    },
    "646": {
      "fn": "CoreController._getContractAddress",
      "offset": [
        1703,
        1816
      ],
      "op": "ADD",
      "path": "22"
    },
    "647": {
      "op": "MSTORE"
    },
    "648": {
      "op": "PUSH1",
      "value": "0x25"
    },
    "650": {
      "op": "PUSH1",
      "value": "0x24"
    },
    "652": {
      "op": "DUP3"
    },
    "653": {
      "op": "ADD"
    },
    "654": {
      "op": "MSTORE"
    },
    "655": {
      "op": "PUSH32",
      "value": "0x4552524F523A4352432D3030343A434F4E54524143545F4E4F545F5245474953"
    },
    "688": {
      "op": "PUSH1",
      "value": "0x44"
    },
    "690": {
      "op": "DUP3"
    },
    "691": {
      "op": "ADD"
    },
    "692": {
      "op": "MSTORE"
    },
    "693": {
      "op": "PUSH5",
      "value": "0x1511549151"
    },
    "699": {
      "op": "PUSH1",
      "value": "0xDA"
    },
    "701": {
      "op": "SHL"
    },
    "702": {
      "op": "PUSH1",
      "value": "0x64"
    },
    "704": {
      "op": "DUP3"
    },
    "705": {
      "op": "ADD"
    },
    "706": {
      "op": "MSTORE"
    },
    "707": {
      "op": "PUSH1",
      "value": "0x84"
    },
    "709": {
      "op": "ADD"
    },
    "710": {
      "fn": "CoreController._getContractAddress",
      "offset": [
        1703,
        1816
      ],
      "op": "PUSH2",
      "path": "22",
      "value": "0xE5"
    },
    "713": {
      "op": "JUMP"
    },
    "714": {
      "fn": "CoreController._afterInitialize",
      "offset": [
        1460,
        1524
      ],
      "op": "JUMPDEST",
      "path": "22"
    },
    "715": {
      "offset": [
        4888,
        4901
      ],
      "op": "PUSH1",
      "path": "1",
      "value": "0x0"
    },
    "717": {
      "fn": "CoreController._afterInitialize",
      "offset": [
        4888,
        4901
      ],
      "op": "SLOAD",
      "path": "1"
    },
    "718": {
      "fn": "CoreController._afterInitialize",
      "offset": [
        4888,
        4901
      ],
      "op": "PUSH2",
      "path": "1",
      "value": "0x100"
    },
    "721": {
      "fn": "CoreController._afterInitialize",
      "offset": [
        4888,
        4901
      ],
      "op": "SWAP1",
      "path": "1"
    },
    "722": {
      "fn": "CoreController._afterInitialize",
      "offset": [
        4888,
        4901
      ],
      "op": "DIV",
      "path": "1"
    },
    "723": {
      "fn": "CoreController._afterInitialize",
      "offset": [
        4888,
        4901
      ],
      "op": "PUSH1",
      "path": "1",
      "value": "0xFF"
    },
    "725": {
      "branch": 9,
      "fn": "CoreController._afterInitialize",
      "offset": [
        4888,
        4901
      ],
      "op": "AND",
      "path": "1"
    },
    "726": {
      "offset": [
        4880,
        4949
      ],
      "op": "PUSH2",
      "path": "1",
      "value": "0x335"
    },
    "729": {
      "branch": 9,
      "offset": [
        4880,
        4949
      ],
      "op": "JUMPI",
      "path": "1"
    },
    "730": {
      "fn": "CoreController._afterInitialize",
      "offset": [
        4880,
        4949
      ],
      "op": "PUSH1",
      "path": "1",
      "value": "0x40"
    },
    "732": {
      "fn": "CoreController._afterInitialize",
      "offset": [
        4880,
        4949
      ],
      "op": "MLOAD",
      "path": "1"
    },
    "733": {
      "op": "PUSH3",
      "value": "0x461BCD"
    },
    "737": {
      "op": "PUSH1",
      "value": "0xE5"
    },
    "739": {
      "op": "SHL"
    },
    "740": {
      "offset": [
        4880,
        4949
      ],
      "op": "DUP2",
      "path": "1"
    },
    "741": {
      "fn": "CoreController._afterInitialize",
      "offset": [
        4880,
        4949
      ],
      "op": "MSTORE",
      "path": "1"
    },
    "742": {
      "op": "PUSH1",
      "value": "0x20"
    },
    "744": {
      "offset": [
        4880,
        4949
      ],
      "op": "PUSH1",
      "path": "1",
      "value": "0x4"
    },
    "746": {
      "fn": "CoreController._afterInitialize",
      "offset": [
        4880,
        4949
      ],
      "op": "DUP3",
      "path": "1"
    },
    "747": {
      "fn": "CoreController._afterInitialize",
      "offset": [
        4880,
        4949
      ],
      "op": "ADD",
      "path": "1"
    },
    "748": {
      "op": "MSTORE"
    },
    "749": {
      "op": "PUSH1",
      "value": "0x2B"
    },
    "751": {
      "op": "PUSH1",
      "value": "0x24"
    },
    "753": {
      "op": "DUP3"
    },
    "754": {
      "op": "ADD"
    },
    "755": {
      "op": "MSTORE"
    },
    "756": {
      "op": "PUSH32",
      "value": "0x496E697469616C697A61626C653A20636F6E7472616374206973206E6F742069"
    },
    "789": {
      "op": "PUSH1",
      "value": "0x44"
    },
    "791": {
      "op": "DUP3"
    },
    "792": {
      "op": "ADD"
    },
    "793": {
      "op": "MSTORE"
    },
    "794": {
      "op": "PUSH11",
      "value": "0x6E697469616C697A696E67"
    },
    "806": {
      "op": "PUSH1",
      "value": "0xA8"
    },
    "808": {
      "op": "SHL"
    },
    "809": {
      "op": "PUSH1",
      "value": "0x64"
    },
    "811": {
      "op": "DUP3"
    },
    "812": {
      "op": "ADD"
    },
    "813": {
      "op": "MSTORE"
    },
    "814": {
      "op": "PUSH1",
      "value": "0x84"
    },
    "816": {
      "op": "ADD"
    },
    "817": {
      "offset": [
        4880,
        4949
      ],
      "op": "PUSH2",
      "path": "1",
      "value": "0xE5"
    },
    "820": {
      "op": "JUMP"
    },
    "821": {
      "offset": [
        4880,
        4949
      ],
      "op": "JUMPDEST",
      "path": "1"
    },
    "822": {
      "fn": "CoreController._afterInitialize",
      "jump": "o",
      "offset": [
        1460,
        1524
      ],
      "op": "JUMP",
      "path": "22"
    },
    "823": {
      "op": "JUMPDEST"
    },
    "824": {
      "op": "PUSH1",
      "value": "0x0"
    },
    "826": {
      "op": "PUSH1",
      "value": "0x20"
    },
    "828": {
      "op": "DUP3"
    },
    "829": {
      "op": "DUP5"
    },
    "830": {
      "op": "SUB"
    },
    "831": {
      "op": "SLT"
    },
    "832": {
      "op": "ISZERO"
    },
    "833": {
      "op": "PUSH2",
      "value": "0x348"
    },
    "836": {
      "op": "JUMPI"
    },
    "837": {
      "op": "DUP1"
    },
    "838": {
      "op": "DUP2"
    },
    "839": {
      "op": "REVERT"
    },
    "840": {
      "op": "JUMPDEST"
    },
    "841": {
      "op": "DUP2"
    },
    "842": {
      "op": "CALLDATALOAD"
    },
    "843": {
      "op": "PUSH2",
      "value": "0x353"
    },
    "846": {
      "op": "DUP2"
    },
    "847": {
      "op": "PUSH2",
      "value": "0x372"
    },
    "850": {
      "jump": "i",
      "op": "JUMP"
    },
    "851": {
      "op": "JUMPDEST"
    },
    "852": {
      "op": "SWAP4"
    },
    "853": {
      "op": "SWAP3"
    },
    "854": {
      "op": "POP"
    },
    "855": {
      "op": "POP"
    },
    "856": {
      "op": "POP"
    },
    "857": {
      "jump": "o",
      "op": "JUMP"
    },
    "858": {
      "op": "JUMPDEST"
    },
    "859": {
      "op": "PUSH1",
      "value": "0x0"
    },
    "861": {
      "op": "PUSH1",
      "value": "0x20"
    },
    "863": {
      "op": "DUP3"
    },
    "864": {
      "op": "DUP5"
    },
    "865": {
      "op": "SUB"
    },
    "866": {
      "op": "SLT"
    },
    "867": {
      "op": "ISZERO"
    },
    "868": {
      "op": "PUSH2",
      "value": "0x36B"
    },
    "871": {
      "op": "JUMPI"
    },
    "872": {
      "op": "DUP1"
    },
    "873": {
      "op": "DUP2"
    },
    "874": {
      "op": "REVERT"
    },
    "875": {
      "op": "JUMPDEST"
    },
    "876": {
      "op": "DUP2"
    },
    "877": {
      "op": "MLOAD"
    },
    "878": {
      "op": "PUSH2",
      "value": "0x353"
    },
    "881": {
      "op": "DUP2"
    },
    "882": {
      "op": "JUMPDEST"
    },
    "883": {
      "op": "PUSH1",
      "value": "0x1"
    },
    "885": {
      "op": "PUSH1",
      "value": "0x1"
    },
    "887": {
      "op": "PUSH1",
      "value": "0xA0"
    },
    "889": {
      "op": "SHL"
    },
    "890": {
      "op": "SUB"
    },
    "891": {
      "op": "DUP2"
    },
    "892": {
      "op": "AND"
    },
    "893": {
      "op": "DUP2"
    },
    "894": {
      "op": "EQ"
    },
    "895": {
      "op": "PUSH2",
      "value": "0x387"
    },
    "898": {
      "op": "JUMPI"
    },
    "899": {
      "op": "PUSH1",
      "value": "0x0"
    },
    "901": {
      "op": "DUP1"
    },
    "902": {
      "op": "REVERT"
    },
    "903": {
      "op": "JUMPDEST"
    },
    "904": {
      "op": "POP"
    },
    "905": {
      "jump": "o",
      "op": "JUMP"
    }
  },
  "sha1": "3a1cde09c47ae2f8b56d33099f35db98bbda8960",
  "source": "// SPDX-License-Identifier: Apache-2.0\npragma solidity 0.8.2;\n\nimport \"@etherisc/gif-interface/contracts/modules/IAccess.sol\";\nimport \"@etherisc/gif-interface/contracts/modules/IRegistry.sol\";\n\nimport \"@openzeppelin/contracts/proxy/utils/Initializable.sol\";\nimport \"@openzeppelin/contracts/utils/Context.sol\";\n\ncontract CoreController is\n    Context,\n    Initializable \n{\n    IRegistry internal _registry;\n    IAccess internal _access;\n\n    constructor () {\n        _disableInitializers();\n    }\n\n    modifier onlyInstanceOperator() {\n        require(\n            _registry.ensureSender(_msgSender(), \"InstanceOperatorService\"),\n            \"ERROR:CRC-001:NOT_INSTANCE_OPERATOR\");\n        _;\n    }\n\n    modifier onlyPolicyFlow(bytes32 module) {\n        // Allow only from delegator\n        require(\n            address(this) == _getContractAddress(module),\n            \"ERROR:CRC-002:NOT_ON_STORAGE\"\n        );\n\n        // Allow only ProductService (it delegates to PolicyFlow)\n        require(\n            _msgSender() == _getContractAddress(\"ProductService\"),\n            \"ERROR:CRC-003:NOT_PRODUCT_SERVICE\"\n        );\n        _;\n    }\n\n    function initialize(address registry) public initializer {\n        _registry = IRegistry(registry);\n        if (_getName() != \"Access\") { _access = IAccess(_getContractAddress(\"Access\")); }\n        \n        _afterInitialize();\n    }\n\n    function _getName() internal virtual pure returns(bytes32) { return \"\"; }\n\n    function _afterInitialize() internal virtual onlyInitializing {}\n\n    function _getContractAddress(bytes32 contractName) internal view returns (address contractAddress) { \n        contractAddress = _registry.getContract(contractName);\n        require(\n            contractAddress != address(0),\n            \"ERROR:CRC-004:CONTRACT_NOT_REGISTERED\"\n        );\n    }\n}\n",
  "sourceMap": "311:1514:22:-:0;;;441:54;;;;;;;;;-1:-1:-1;466:22:22;:20;:22::i;:::-;311:1514;;5366:279:1;5434:13;;;;;;;5433:14;5425:66;;;;-1:-1:-1;;;5425:66:1;;216:2:67;5425:66:1;;;198:21:67;255:2;235:18;;;228:30;294:34;274:18;;;267:62;-1:-1:-1;;;345:18:67;;;338:37;392:19;;5425:66:1;;;;;;;;5505:12;;5520:15;5505:12;;;:30;5501:138;;;5551:12;:30;;-1:-1:-1;;5551:30:1;5566:15;5551:30;;;;;;5600:28;;564:36:67;;;5600:28:1;;552:2:67;537:18;5600:28:1;;;;;;;5501:138;5366:279::o;519:87:67:-;311:1514:22;;;;;;",
  "sourcePath": "/home/vscode/.brownie/packages/etherisc/gif-contracts@b58fd27/contracts/shared/CoreController.sol",
  "type": "contract"
}