{
  "abi": [
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "id",
          "type": "uint256"
        }
      ],
      "name": "LogComponentApproved",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "id",
          "type": "uint256"
        }
      ],
      "name": "LogComponentArchived",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "componentName",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "enum IComponent.ComponentType",
          "name": "componentType",
          "type": "uint8"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "componentAddress",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "registryAddress",
          "type": "address"
        }
      ],
      "name": "LogComponentCreated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "id",
          "type": "uint256"
        }
      ],
      "name": "LogComponentDeclined",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "id",
          "type": "uint256"
        }
      ],
      "name": "LogComponentPaused",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "componentName",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "enum IComponent.ComponentType",
          "name": "componentType",
          "type": "uint8"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "componentAddress",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "id",
          "type": "uint256"
        }
      ],
      "name": "LogComponentProposed",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "id",
          "type": "uint256"
        }
      ],
      "name": "LogComponentResumed",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "id",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "enum IComponent.ComponentState",
          "name": "stateOld",
          "type": "uint8"
        },
        {
          "indexed": false,
          "internalType": "enum IComponent.ComponentState",
          "name": "stateNew",
          "type": "uint8"
        }
      ],
      "name": "LogComponentStateChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "id",
          "type": "uint256"
        }
      ],
      "name": "LogComponentSuspended",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "id",
          "type": "uint256"
        }
      ],
      "name": "LogComponentUnpaused",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "approvalCallback",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "archiveCallback",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "declineCallback",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getId",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getName",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getOwner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getRegistry",
      "outputs": [
        {
          "internalType": "contract IRegistry",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getState",
      "outputs": [
        {
          "internalType": "enum IComponent.ComponentState",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getType",
      "outputs": [
        {
          "internalType": "enum IComponent.ComponentType",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "isOracle",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "isProduct",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "isRiskpool",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "pauseCallback",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "proposalCallback",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "resumeCallback",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "id",
          "type": "uint256"
        }
      ],
      "name": "setId",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "suspendCallback",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "unpauseCallback",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "allSourcePaths": {
    "0": "/home/vscode/.brownie/packages/OpenZeppelin/openzeppelin-contracts@4.7.3/contracts/access/Ownable.sol",
    "11": "/home/vscode/.brownie/packages/OpenZeppelin/openzeppelin-contracts@4.7.3/contracts/utils/Context.sol",
    "15": "/home/vscode/.brownie/packages/OpenZeppelin/openzeppelin-contracts@4.7.3/contracts/utils/introspection/IERC165.sol",
    "26": "/home/vscode/.brownie/packages/etherisc/gif-interface@3b0002a/contracts/components/Component.sol",
    "27": "/home/vscode/.brownie/packages/etherisc/gif-interface@3b0002a/contracts/components/IComponent.sol",
    "33": "/home/vscode/.brownie/packages/etherisc/gif-interface@3b0002a/contracts/modules/IAccess.sol",
    "35": "/home/vscode/.brownie/packages/etherisc/gif-interface@3b0002a/contracts/modules/IComponentEvents.sol",
    "38": "/home/vscode/.brownie/packages/etherisc/gif-interface@3b0002a/contracts/modules/IRegistry.sol",
    "4": "/home/vscode/.brownie/packages/OpenZeppelin/openzeppelin-contracts@4.7.3/contracts/token/ERC20/IERC20.sol",
    "40": "/home/vscode/.brownie/packages/etherisc/gif-interface@3b0002a/contracts/services/IComponentOwnerService.sol",
    "41": "/home/vscode/.brownie/packages/etherisc/gif-interface@3b0002a/contracts/services/IInstanceOperatorService.sol",
    "42": "/home/vscode/.brownie/packages/etherisc/gif-interface@3b0002a/contracts/services/IInstanceService.sol",
    "43": "/home/vscode/.brownie/packages/etherisc/gif-interface@3b0002a/contracts/services/IOracleService.sol",
    "44": "/home/vscode/.brownie/packages/etherisc/gif-interface@3b0002a/contracts/services/IProductService.sol",
    "45": "/home/vscode/.brownie/packages/etherisc/gif-interface@3b0002a/contracts/services/IRiskpoolService.sol",
    "46": "/home/vscode/.brownie/packages/etherisc/gif-interface@3b0002a/contracts/tokens/IBundleToken.sol",
    "7": "/home/vscode/.brownie/packages/OpenZeppelin/openzeppelin-contracts@4.7.3/contracts/token/ERC721/IERC721.sol"
  },
  "ast": {
    "absolutePath": "/home/vscode/.brownie/packages/etherisc/gif-interface@3b0002a/contracts/components/Component.sol",
    "exportedSymbols": {
      "Component": [
        14352
      ],
      "Context": [
        15648
      ],
      "IAccess": [
        22927
      ],
      "IBundle": [
        13382
      ],
      "IBundleToken": [
        13428
      ],
      "IComponent": [
        11675
      ],
      "IComponentEvents": [
        22980
      ],
      "IComponentOwnerService": [
        23015
      ],
      "IERC165": [
        22864
      ],
      "IERC20": [
        15820
      ],
      "IERC721": [
        13932
      ],
      "IInstanceOperatorService": [
        23282
      ],
      "IInstanceService": [
        14934
      ],
      "IOracleService": [
        23292
      ],
      "IPolicy": [
        12649
      ],
      "IPool": [
        23131
      ],
      "IProductService": [
        22121
      ],
      "IRegistry": [
        21976
      ],
      "IRiskpoolService": [
        15040
      ],
      "ITreasury": [
        12909
      ],
      "Ownable": [
        9476
      ]
    },
    "id": 14353,
    "license": "Apache-2.0",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 13934,
        "literals": [
          "solidity",
          "0.8",
          ".2"
        ],
        "nodeType": "PragmaDirective",
        "src": "40:22:26"
      },
      {
        "absolutePath": "/home/vscode/.brownie/packages/etherisc/gif-interface@3b0002a/contracts/components/IComponent.sol",
        "file": "./IComponent.sol",
        "id": 13935,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 14353,
        "sourceUnit": 11676,
        "src": "66:26:26",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/vscode/.brownie/packages/etherisc/gif-interface@3b0002a/contracts/modules/IAccess.sol",
        "file": "../modules/IAccess.sol",
        "id": 13936,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 14353,
        "sourceUnit": 22928,
        "src": "94:32:26",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/vscode/.brownie/packages/etherisc/gif-interface@3b0002a/contracts/modules/IComponentEvents.sol",
        "file": "../modules/IComponentEvents.sol",
        "id": 13937,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 14353,
        "sourceUnit": 22981,
        "src": "128:41:26",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/vscode/.brownie/packages/etherisc/gif-interface@3b0002a/contracts/modules/IRegistry.sol",
        "file": "../modules/IRegistry.sol",
        "id": 13938,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 14353,
        "sourceUnit": 21977,
        "src": "171:34:26",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/vscode/.brownie/packages/etherisc/gif-interface@3b0002a/contracts/services/IComponentOwnerService.sol",
        "file": "../services/IComponentOwnerService.sol",
        "id": 13939,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 14353,
        "sourceUnit": 23016,
        "src": "207:48:26",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/vscode/.brownie/packages/etherisc/gif-interface@3b0002a/contracts/services/IInstanceService.sol",
        "file": "../services/IInstanceService.sol",
        "id": 13940,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 14353,
        "sourceUnit": 14935,
        "src": "257:42:26",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/vscode/.brownie/packages/OpenZeppelin/openzeppelin-contracts@4.7.3/contracts/access/Ownable.sol",
        "file": "@openzeppelin/contracts/access/Ownable.sol",
        "id": 13941,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 14353,
        "sourceUnit": 9477,
        "src": "301:52:26",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": true,
        "baseContracts": [
          {
            "baseName": {
              "id": 13942,
              "name": "IComponent",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 11675,
              "src": "498:10:26"
            },
            "id": 13943,
            "nodeType": "InheritanceSpecifier",
            "src": "498:10:26"
          },
          {
            "baseName": {
              "id": 13944,
              "name": "IComponentEvents",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 22980,
              "src": "515:16:26"
            },
            "id": 13945,
            "nodeType": "InheritanceSpecifier",
            "src": "515:16:26"
          },
          {
            "baseName": {
              "id": 13946,
              "name": "Ownable",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 9476,
              "src": "538:7:26"
            },
            "id": 13947,
            "nodeType": "InheritanceSpecifier",
            "src": "538:7:26"
          }
        ],
        "contractDependencies": [
          9476,
          11675,
          15648,
          22980
        ],
        "contractKind": "contract",
        "fullyImplemented": true,
        "id": 14352,
        "linearizedBaseContracts": [
          14352,
          9476,
          15648,
          22980,
          11675
        ],
        "name": "Component",
        "nameLocation": "479:9:26",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": false,
            "id": 13949,
            "mutability": "mutable",
            "name": "_componentName",
            "nameLocation": "571:14:26",
            "nodeType": "VariableDeclaration",
            "scope": 14352,
            "src": "555:30:26",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 13948,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "555:7:26",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 13951,
            "mutability": "mutable",
            "name": "_componentId",
            "nameLocation": "608:12:26",
            "nodeType": "VariableDeclaration",
            "scope": 14352,
            "src": "592:28:26",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 13950,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "592:7:26",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 13954,
            "mutability": "mutable",
            "name": "_componentType",
            "nameLocation": "660:14:26",
            "nodeType": "VariableDeclaration",
            "scope": 14352,
            "src": "627:47:26",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_enum$_ComponentType_$11578",
              "typeString": "enum IComponent.ComponentType"
            },
            "typeName": {
              "id": 13953,
              "nodeType": "UserDefinedTypeName",
              "pathNode": {
                "id": 13952,
                "name": "IComponent.ComponentType",
                "nodeType": "IdentifierPath",
                "referencedDeclaration": 11578,
                "src": "627:24:26"
              },
              "referencedDeclaration": 11578,
              "src": "627:24:26",
              "typeDescriptions": {
                "typeIdentifier": "t_enum$_ComponentType_$11578",
                "typeString": "enum IComponent.ComponentType"
              }
            },
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 13957,
            "mutability": "mutable",
            "name": "_registry",
            "nameLocation": "701:9:26",
            "nodeType": "VariableDeclaration",
            "scope": 14352,
            "src": "683:27:26",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_IRegistry_$21976",
              "typeString": "contract IRegistry"
            },
            "typeName": {
              "id": 13956,
              "nodeType": "UserDefinedTypeName",
              "pathNode": {
                "id": 13955,
                "name": "IRegistry",
                "nodeType": "IdentifierPath",
                "referencedDeclaration": 21976,
                "src": "683:9:26"
              },
              "referencedDeclaration": 21976,
              "src": "683:9:26",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IRegistry_$21976",
                "typeString": "contract IRegistry"
              }
            },
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 13960,
            "mutability": "mutable",
            "name": "_access",
            "nameLocation": "733:7:26",
            "nodeType": "VariableDeclaration",
            "scope": 14352,
            "src": "717:23:26",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_IAccess_$22927",
              "typeString": "contract IAccess"
            },
            "typeName": {
              "id": 13959,
              "nodeType": "UserDefinedTypeName",
              "pathNode": {
                "id": 13958,
                "name": "IAccess",
                "nodeType": "IdentifierPath",
                "referencedDeclaration": 22927,
                "src": "717:7:26"
              },
              "referencedDeclaration": 22927,
              "src": "717:7:26",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IAccess_$22927",
                "typeString": "contract IAccess"
              }
            },
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 13963,
            "mutability": "mutable",
            "name": "_componentOwnerService",
            "nameLocation": "778:22:26",
            "nodeType": "VariableDeclaration",
            "scope": 14352,
            "src": "747:53:26",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_IComponentOwnerService_$23015",
              "typeString": "contract IComponentOwnerService"
            },
            "typeName": {
              "id": 13962,
              "nodeType": "UserDefinedTypeName",
              "pathNode": {
                "id": 13961,
                "name": "IComponentOwnerService",
                "nodeType": "IdentifierPath",
                "referencedDeclaration": 23015,
                "src": "747:22:26"
              },
              "referencedDeclaration": 23015,
              "src": "747:22:26",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IComponentOwnerService_$23015",
                "typeString": "contract IComponentOwnerService"
              }
            },
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 13966,
            "mutability": "mutable",
            "name": "_instanceService",
            "nameLocation": "832:16:26",
            "nodeType": "VariableDeclaration",
            "scope": 14352,
            "src": "807:41:26",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_IInstanceService_$14934",
              "typeString": "contract IInstanceService"
            },
            "typeName": {
              "id": 13965,
              "nodeType": "UserDefinedTypeName",
              "pathNode": {
                "id": 13964,
                "name": "IInstanceService",
                "nodeType": "IdentifierPath",
                "referencedDeclaration": 14934,
                "src": "807:16:26"
              },
              "referencedDeclaration": 14934,
              "src": "807:16:26",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IInstanceService_$14934",
                "typeString": "contract IInstanceService"
              }
            },
            "visibility": "private"
          },
          {
            "body": {
              "id": 13979,
              "nodeType": "Block",
              "src": "896:177:26",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 13974,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 13969,
                            "name": "_msgSender",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 15638,
                            "src": "930:10:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                              "typeString": "function () view returns (address)"
                            }
                          },
                          "id": 13970,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "930:12:26",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "496e7374616e63654f70657261746f7253657276696365",
                              "id": 13972,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "966:25:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_893eee863631637173ead46f1c66388136d13bfeb40cdedfb3bfe4f34f933544",
                                "typeString": "literal_string \"InstanceOperatorService\""
                              },
                              "value": "InstanceOperatorService"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_stringliteral_893eee863631637173ead46f1c66388136d13bfeb40cdedfb3bfe4f34f933544",
                                "typeString": "literal_string \"InstanceOperatorService\""
                              }
                            ],
                            "id": 13971,
                            "name": "_getContractAddress",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14351,
                            "src": "946:19:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_address_$",
                              "typeString": "function (bytes32) view returns (address)"
                            }
                          },
                          "id": 13973,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "946:46:26",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "930:62:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4552524f523a434d502d3030313a4e4f545f494e5354414e43455f4f50455241544f525f53455256494345",
                        "id": 13975,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1007:45:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_0cf129911f5ea89264cf2d932a66d14be63649422912365886718bb28b51326b",
                          "typeString": "literal_string \"ERROR:CMP-001:NOT_INSTANCE_OPERATOR_SERVICE\""
                        },
                        "value": "ERROR:CMP-001:NOT_INSTANCE_OPERATOR_SERVICE"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_0cf129911f5ea89264cf2d932a66d14be63649422912365886718bb28b51326b",
                          "typeString": "literal_string \"ERROR:CMP-001:NOT_INSTANCE_OPERATOR_SERVICE\""
                        }
                      ],
                      "id": 13968,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "907:7:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 13976,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "907:146:26",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13977,
                  "nodeType": "ExpressionStatement",
                  "src": "907:146:26"
                },
                {
                  "id": 13978,
                  "nodeType": "PlaceholderStatement",
                  "src": "1064:1:26"
                }
              ]
            },
            "id": 13980,
            "name": "onlyInstanceOperatorService",
            "nameLocation": "866:27:26",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 13967,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "893:2:26"
            },
            "src": "857:216:26",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 13993,
              "nodeType": "Block",
              "src": "1106:147:26",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 13988,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 13983,
                            "name": "_msgSender",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 15638,
                            "src": "1140:10:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                              "typeString": "function () view returns (address)"
                            }
                          },
                          "id": 13984,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1140:12:26",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "436f6d706f6e656e74",
                              "id": 13986,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1176:11:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_20422c9fb475bf3099f246b9754fae871c7ccc7264ca39a5be99fea0688ffe24",
                                "typeString": "literal_string \"Component\""
                              },
                              "value": "Component"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_stringliteral_20422c9fb475bf3099f246b9754fae871c7ccc7264ca39a5be99fea0688ffe24",
                                "typeString": "literal_string \"Component\""
                              }
                            ],
                            "id": 13985,
                            "name": "_getContractAddress",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14351,
                            "src": "1156:19:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_address_$",
                              "typeString": "function (bytes32) view returns (address)"
                            }
                          },
                          "id": 13987,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1156:32:26",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "1140:48:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4552524f523a434d502d3030323a4e4f545f434f4d504f4e454e54",
                        "id": 13989,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1203:29:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_13d854cfce65ca3d798b24f0152adbdef51328a4972814c276101e4a34ebcd4a",
                          "typeString": "literal_string \"ERROR:CMP-002:NOT_COMPONENT\""
                        },
                        "value": "ERROR:CMP-002:NOT_COMPONENT"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_13d854cfce65ca3d798b24f0152adbdef51328a4972814c276101e4a34ebcd4a",
                          "typeString": "literal_string \"ERROR:CMP-002:NOT_COMPONENT\""
                        }
                      ],
                      "id": 13982,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "1117:7:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 13990,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1117:116:26",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13991,
                  "nodeType": "ExpressionStatement",
                  "src": "1117:116:26"
                },
                {
                  "id": 13992,
                  "nodeType": "PlaceholderStatement",
                  "src": "1244:1:26"
                }
              ]
            },
            "id": 13994,
            "name": "onlyComponent",
            "nameLocation": "1090:13:26",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 13981,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1103:2:26"
            },
            "src": "1081:172:26",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 14008,
              "nodeType": "Block",
              "src": "1298:160:26",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 14003,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 13997,
                            "name": "_msgSender",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 15638,
                            "src": "1332:10:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                              "typeString": "function () view returns (address)"
                            }
                          },
                          "id": 13998,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1332:12:26",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "arguments": [
                            {
                              "id": 14001,
                              "name": "_componentOwnerService",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13963,
                              "src": "1356:22:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IComponentOwnerService_$23015",
                                "typeString": "contract IComponentOwnerService"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_IComponentOwnerService_$23015",
                                "typeString": "contract IComponentOwnerService"
                              }
                            ],
                            "id": 14000,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "1348:7:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 13999,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "1348:7:26",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 14002,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1348:31:26",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "1332:47:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4552524f523a434d502d3030333a4e4f545f434f4d504f4e454e545f4f574e45525f53455256494345",
                        "id": 14004,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1394:43:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_5a42b6523909db0c3f07c7fc4301f658eda0aaaedcec4492e9f126a1a0b351bc",
                          "typeString": "literal_string \"ERROR:CMP-003:NOT_COMPONENT_OWNER_SERVICE\""
                        },
                        "value": "ERROR:CMP-003:NOT_COMPONENT_OWNER_SERVICE"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_5a42b6523909db0c3f07c7fc4301f658eda0aaaedcec4492e9f126a1a0b351bc",
                          "typeString": "literal_string \"ERROR:CMP-003:NOT_COMPONENT_OWNER_SERVICE\""
                        }
                      ],
                      "id": 13996,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "1309:7:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 14005,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1309:129:26",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 14006,
                  "nodeType": "ExpressionStatement",
                  "src": "1309:129:26"
                },
                {
                  "id": 14007,
                  "nodeType": "PlaceholderStatement",
                  "src": "1449:1:26"
                }
              ]
            },
            "id": 14009,
            "name": "onlyComponentOwnerService",
            "nameLocation": "1270:25:26",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 13995,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1295:2:26"
            },
            "src": "1261:197:26",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 14073,
              "nodeType": "Block",
              "src": "1608:515:26",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 14027,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 14022,
                          "name": "registry",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14016,
                          "src": "1627:8:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 14025,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1647:1:26",
                              "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": 14024,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "1639:7:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 14023,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "1639:7:26",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 14026,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1639:10:26",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "1627:22:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4552524f523a434d502d3030343a52454749535452595f414444524553535f5a45524f",
                        "id": 14028,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1651:37:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_5dcfc840a63d8a5a46ba6b85476b7d901628bd3e28990c52c8816700a9111acc",
                          "typeString": "literal_string \"ERROR:CMP-004:REGISTRY_ADDRESS_ZERO\""
                        },
                        "value": "ERROR:CMP-004:REGISTRY_ADDRESS_ZERO"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_5dcfc840a63d8a5a46ba6b85476b7d901628bd3e28990c52c8816700a9111acc",
                          "typeString": "literal_string \"ERROR:CMP-004:REGISTRY_ADDRESS_ZERO\""
                        }
                      ],
                      "id": 14021,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "1619:7:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 14029,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1619:70:26",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 14030,
                  "nodeType": "ExpressionStatement",
                  "src": "1619:70:26"
                },
                {
                  "expression": {
                    "id": 14035,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 14031,
                      "name": "_registry",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13957,
                      "src": "1702:9:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IRegistry_$21976",
                        "typeString": "contract IRegistry"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 14033,
                          "name": "registry",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14016,
                          "src": "1724:8:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 14032,
                        "name": "IRegistry",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21976,
                        "src": "1714:9:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_IRegistry_$21976_$",
                          "typeString": "type(contract IRegistry)"
                        }
                      },
                      "id": 14034,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1714:19:26",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IRegistry_$21976",
                        "typeString": "contract IRegistry"
                      }
                    },
                    "src": "1702:31:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IRegistry_$21976",
                      "typeString": "contract IRegistry"
                    }
                  },
                  "id": 14036,
                  "nodeType": "ExpressionStatement",
                  "src": "1702:31:26"
                },
                {
                  "expression": {
                    "id": 14040,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 14037,
                      "name": "_access",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13960,
                      "src": "1744:7:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IAccess_$22927",
                        "typeString": "contract IAccess"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 14038,
                        "name": "_getAccess",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14312,
                        "src": "1754:10:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_IAccess_$22927_$",
                          "typeString": "function () view returns (contract IAccess)"
                        }
                      },
                      "id": 14039,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1754:12:26",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IAccess_$22927",
                        "typeString": "contract IAccess"
                      }
                    },
                    "src": "1744:22:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IAccess_$22927",
                      "typeString": "contract IAccess"
                    }
                  },
                  "id": 14041,
                  "nodeType": "ExpressionStatement",
                  "src": "1744:22:26"
                },
                {
                  "expression": {
                    "id": 14045,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 14042,
                      "name": "_componentOwnerService",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13963,
                      "src": "1777:22:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IComponentOwnerService_$23015",
                        "typeString": "contract IComponentOwnerService"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 14043,
                        "name": "_getComponentOwnerService",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14338,
                        "src": "1802:25:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_IComponentOwnerService_$23015_$",
                          "typeString": "function () view returns (contract IComponentOwnerService)"
                        }
                      },
                      "id": 14044,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1802:27:26",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IComponentOwnerService_$23015",
                        "typeString": "contract IComponentOwnerService"
                      }
                    },
                    "src": "1777:52:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IComponentOwnerService_$23015",
                      "typeString": "contract IComponentOwnerService"
                    }
                  },
                  "id": 14046,
                  "nodeType": "ExpressionStatement",
                  "src": "1777:52:26"
                },
                {
                  "expression": {
                    "id": 14050,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 14047,
                      "name": "_instanceService",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13966,
                      "src": "1840:16:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IInstanceService_$14934",
                        "typeString": "contract IInstanceService"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 14048,
                        "name": "_getInstanceService",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14325,
                        "src": "1859:19:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_IInstanceService_$14934_$",
                          "typeString": "function () view returns (contract IInstanceService)"
                        }
                      },
                      "id": 14049,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1859:21:26",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IInstanceService_$14934",
                        "typeString": "contract IInstanceService"
                      }
                    },
                    "src": "1840:40:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IInstanceService_$14934",
                      "typeString": "contract IInstanceService"
                    }
                  },
                  "id": 14051,
                  "nodeType": "ExpressionStatement",
                  "src": "1840:40:26"
                },
                {
                  "expression": {
                    "id": 14054,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 14052,
                      "name": "_componentName",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13949,
                      "src": "1893:14:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 14053,
                      "name": "name",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14011,
                      "src": "1910:4:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "1893:21:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 14055,
                  "nodeType": "ExpressionStatement",
                  "src": "1893:21:26"
                },
                {
                  "expression": {
                    "id": 14058,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 14056,
                      "name": "_componentType",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13954,
                      "src": "1925:14:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_ComponentType_$11578",
                        "typeString": "enum IComponent.ComponentType"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 14057,
                      "name": "componentType",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14014,
                      "src": "1942:13:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_ComponentType_$11578",
                        "typeString": "enum IComponent.ComponentType"
                      }
                    },
                    "src": "1925:30:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_ComponentType_$11578",
                      "typeString": "enum IComponent.ComponentType"
                    }
                  },
                  "id": 14059,
                  "nodeType": "ExpressionStatement",
                  "src": "1925:30:26"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 14061,
                        "name": "_componentName",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13949,
                        "src": "2007:14:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 14062,
                        "name": "_componentType",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13954,
                        "src": "2037:14:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_ComponentType_$11578",
                          "typeString": "enum IComponent.ComponentType"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "id": 14065,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -28,
                            "src": "2075:4:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Component_$14352",
                              "typeString": "contract Component"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_Component_$14352",
                              "typeString": "contract Component"
                            }
                          ],
                          "id": 14064,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "2067:7:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 14063,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "2067:7:26",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 14066,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2067:13:26",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "id": 14069,
                            "name": "_registry",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13957,
                            "src": "2104:9:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IRegistry_$21976",
                              "typeString": "contract IRegistry"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_IRegistry_$21976",
                              "typeString": "contract IRegistry"
                            }
                          ],
                          "id": 14068,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "2096:7:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 14067,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "2096:7:26",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 14070,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2096:18:26",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_enum$_ComponentType_$11578",
                          "typeString": "enum IComponent.ComponentType"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 14060,
                      "name": "LogComponentCreated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11597,
                      "src": "1973:19:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_enum$_ComponentType_$11578_$_t_address_$_t_address_$returns$__$",
                        "typeString": "function (bytes32,enum IComponent.ComponentType,address,address)"
                      }
                    },
                    "id": 14071,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1973:142:26",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 14072,
                  "nodeType": "EmitStatement",
                  "src": "1968:147:26"
                }
              ]
            },
            "id": 14074,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [
              {
                "arguments": [],
                "id": 14019,
                "modifierName": {
                  "id": 14018,
                  "name": "Ownable",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 9476,
                  "src": "1593:7:26"
                },
                "nodeType": "ModifierInvocation",
                "src": "1593:9:26"
              }
            ],
            "name": "",
            "nameLocation": "-1:-1:-1",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 14017,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14011,
                  "mutability": "mutable",
                  "name": "name",
                  "nameLocation": "1496:4:26",
                  "nodeType": "VariableDeclaration",
                  "scope": 14074,
                  "src": "1488:12:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 14010,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1488:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14014,
                  "mutability": "mutable",
                  "name": "componentType",
                  "nameLocation": "1536:13:26",
                  "nodeType": "VariableDeclaration",
                  "scope": 14074,
                  "src": "1511:38:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_ComponentType_$11578",
                    "typeString": "enum IComponent.ComponentType"
                  },
                  "typeName": {
                    "id": 14013,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 14012,
                      "name": "IComponent.ComponentType",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 11578,
                      "src": "1511:24:26"
                    },
                    "referencedDeclaration": 11578,
                    "src": "1511:24:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_ComponentType_$11578",
                      "typeString": "enum IComponent.ComponentType"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14016,
                  "mutability": "mutable",
                  "name": "registry",
                  "nameLocation": "1568:8:26",
                  "nodeType": "VariableDeclaration",
                  "scope": 14074,
                  "src": "1560:16:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 14015,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1560:7:26",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1477:106:26"
            },
            "returnParameters": {
              "id": 14020,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1608:0:26"
            },
            "scope": 14352,
            "src": "1466:657:26",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "baseFunctions": [
              11602
            ],
            "body": {
              "id": 14086,
              "nodeType": "Block",
              "src": "2190:22:26",
              "statements": [
                {
                  "expression": {
                    "id": 14084,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 14082,
                      "name": "_componentId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13951,
                      "src": "2192:12:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 14083,
                      "name": "id",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14076,
                      "src": "2207:2:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2192:17:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 14085,
                  "nodeType": "ExpressionStatement",
                  "src": "2192:17:26"
                }
              ]
            },
            "functionSelector": "d0e0ba95",
            "id": 14087,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 14080,
                "modifierName": {
                  "id": 14079,
                  "name": "onlyComponent",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 13994,
                  "src": "2176:13:26"
                },
                "nodeType": "ModifierInvocation",
                "src": "2176:13:26"
              }
            ],
            "name": "setId",
            "nameLocation": "2140:5:26",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 14078,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "2167:8:26"
            },
            "parameters": {
              "id": 14077,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14076,
                  "mutability": "mutable",
                  "name": "id",
                  "nameLocation": "2154:2:26",
                  "nodeType": "VariableDeclaration",
                  "scope": 14087,
                  "src": "2146:10:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 14075,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2146:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2145:12:26"
            },
            "returnParameters": {
              "id": 14081,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2190:0:26"
            },
            "scope": 14352,
            "src": "2131:81:26",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              11607
            ],
            "body": {
              "id": 14095,
              "nodeType": "Block",
              "src": "2277:26:26",
              "statements": [
                {
                  "expression": {
                    "id": 14093,
                    "name": "_componentName",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 13949,
                    "src": "2286:14:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 14092,
                  "id": 14094,
                  "nodeType": "Return",
                  "src": "2279:21:26"
                }
              ]
            },
            "functionSelector": "17d7de7c",
            "id": 14096,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getName",
            "nameLocation": "2229:7:26",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 14089,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "2246:8:26"
            },
            "parameters": {
              "id": 14088,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2236:2:26"
            },
            "returnParameters": {
              "id": 14092,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14091,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 14096,
                  "src": "2268:7:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 14090,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2268:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2267:9:26"
            },
            "scope": 14352,
            "src": "2220:83:26",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              11612
            ],
            "body": {
              "id": 14104,
              "nodeType": "Block",
              "src": "2364:24:26",
              "statements": [
                {
                  "expression": {
                    "id": 14102,
                    "name": "_componentId",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 13951,
                    "src": "2373:12:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 14101,
                  "id": 14103,
                  "nodeType": "Return",
                  "src": "2366:19:26"
                }
              ]
            },
            "functionSelector": "5d1ca631",
            "id": 14105,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getId",
            "nameLocation": "2318:5:26",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 14098,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "2333:8:26"
            },
            "parameters": {
              "id": 14097,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2323:2:26"
            },
            "returnParameters": {
              "id": 14101,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14100,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 14105,
                  "src": "2355:7:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 14099,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2355:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2354:9:26"
            },
            "scope": 14352,
            "src": "2309:79:26",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              11618
            ],
            "body": {
              "id": 14114,
              "nodeType": "Block",
              "src": "2468:26:26",
              "statements": [
                {
                  "expression": {
                    "id": 14112,
                    "name": "_componentType",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 13954,
                    "src": "2477:14:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_ComponentType_$11578",
                      "typeString": "enum IComponent.ComponentType"
                    }
                  },
                  "functionReturnParameters": 14111,
                  "id": 14113,
                  "nodeType": "Return",
                  "src": "2470:21:26"
                }
              ]
            },
            "functionSelector": "15dae03e",
            "id": 14115,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getType",
            "nameLocation": "2403:7:26",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 14107,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "2420:8:26"
            },
            "parameters": {
              "id": 14106,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2410:2:26"
            },
            "returnParameters": {
              "id": 14111,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14110,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 14115,
                  "src": "2442:24:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_ComponentType_$11578",
                    "typeString": "enum IComponent.ComponentType"
                  },
                  "typeName": {
                    "id": 14109,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 14108,
                      "name": "IComponent.ComponentType",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 11578,
                      "src": "2442:24:26"
                    },
                    "referencedDeclaration": 11578,
                    "src": "2442:24:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_ComponentType_$11578",
                      "typeString": "enum IComponent.ComponentType"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2441:26:26"
            },
            "scope": 14352,
            "src": "2394:100:26",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              11624
            ],
            "body": {
              "id": 14127,
              "nodeType": "Block",
              "src": "2576:60:26",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 14124,
                        "name": "_componentId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13951,
                        "src": "2620:12:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 14122,
                        "name": "_instanceService",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13966,
                        "src": "2585:16:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IInstanceService_$14934",
                          "typeString": "contract IInstanceService"
                        }
                      },
                      "id": 14123,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "getComponentState",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 14736,
                      "src": "2585:34:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_uint256_$returns$_t_enum$_ComponentState_$11586_$",
                        "typeString": "function (uint256) view external returns (enum IComponent.ComponentState)"
                      }
                    },
                    "id": 14125,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2585:48:26",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_ComponentState_$11586",
                      "typeString": "enum IComponent.ComponentState"
                    }
                  },
                  "functionReturnParameters": 14121,
                  "id": 14126,
                  "nodeType": "Return",
                  "src": "2578:55:26"
                }
              ]
            },
            "functionSelector": "1865c57d",
            "id": 14128,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getState",
            "nameLocation": "2509:8:26",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 14117,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "2527:8:26"
            },
            "parameters": {
              "id": 14116,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2517:2:26"
            },
            "returnParameters": {
              "id": 14121,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14120,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 14128,
                  "src": "2549:25:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_ComponentState_$11586",
                    "typeString": "enum IComponent.ComponentState"
                  },
                  "typeName": {
                    "id": 14119,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 14118,
                      "name": "IComponent.ComponentState",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 11586,
                      "src": "2549:25:26"
                    },
                    "referencedDeclaration": 11586,
                    "src": "2549:25:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_ComponentState_$11586",
                      "typeString": "enum IComponent.ComponentState"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2548:27:26"
            },
            "scope": 14352,
            "src": "2500:136:26",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              11629
            ],
            "body": {
              "id": 14137,
              "nodeType": "Block",
              "src": "2700:19:26",
              "statements": [
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 14134,
                      "name": "owner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9404,
                      "src": "2709:5:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                        "typeString": "function () view returns (address)"
                      }
                    },
                    "id": 14135,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2709:7:26",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 14133,
                  "id": 14136,
                  "nodeType": "Return",
                  "src": "2702:14:26"
                }
              ]
            },
            "functionSelector": "893d20e8",
            "id": 14138,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getOwner",
            "nameLocation": "2651:8:26",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 14130,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "2669:8:26"
            },
            "parameters": {
              "id": 14129,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2659:2:26"
            },
            "returnParameters": {
              "id": 14133,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14132,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 14138,
                  "src": "2691:7:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 14131,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2691:7:26",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2690:9:26"
            },
            "scope": 14352,
            "src": "2642:77:26",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              11634
            ],
            "body": {
              "id": 14150,
              "nodeType": "Block",
              "src": "2783:62:26",
              "statements": [
                {
                  "expression": {
                    "commonType": {
                      "typeIdentifier": "t_enum$_ComponentType_$11578",
                      "typeString": "enum IComponent.ComponentType"
                    },
                    "id": 14148,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 14144,
                      "name": "_componentType",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13954,
                      "src": "2792:14:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_ComponentType_$11578",
                        "typeString": "enum IComponent.ComponentType"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "expression": {
                        "expression": {
                          "id": 14145,
                          "name": "IComponent",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11675,
                          "src": "2810:10:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_IComponent_$11675_$",
                            "typeString": "type(contract IComponent)"
                          }
                        },
                        "id": 14146,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "ComponentType",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 11578,
                        "src": "2810:24:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_ComponentType_$11578_$",
                          "typeString": "type(enum IComponent.ComponentType)"
                        }
                      },
                      "id": 14147,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "Product",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11576,
                      "src": "2810:32:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_ComponentType_$11578",
                        "typeString": "enum IComponent.ComponentType"
                      }
                    },
                    "src": "2792:50:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 14143,
                  "id": 14149,
                  "nodeType": "Return",
                  "src": "2785:57:26"
                }
              ]
            },
            "functionSelector": "e0815f0d",
            "id": 14151,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isProduct",
            "nameLocation": "2736:9:26",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 14140,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "2755:8:26"
            },
            "parameters": {
              "id": 14139,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2745:2:26"
            },
            "returnParameters": {
              "id": 14143,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14142,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 14151,
                  "src": "2777:4:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 14141,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "2777:4:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2776:6:26"
            },
            "scope": 14352,
            "src": "2727:118:26",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              11639
            ],
            "body": {
              "id": 14163,
              "nodeType": "Block",
              "src": "2906:61:26",
              "statements": [
                {
                  "expression": {
                    "commonType": {
                      "typeIdentifier": "t_enum$_ComponentType_$11578",
                      "typeString": "enum IComponent.ComponentType"
                    },
                    "id": 14161,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 14157,
                      "name": "_componentType",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13954,
                      "src": "2915:14:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_ComponentType_$11578",
                        "typeString": "enum IComponent.ComponentType"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "expression": {
                        "expression": {
                          "id": 14158,
                          "name": "IComponent",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11675,
                          "src": "2933:10:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_IComponent_$11675_$",
                            "typeString": "type(contract IComponent)"
                          }
                        },
                        "id": 14159,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "ComponentType",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 11578,
                        "src": "2933:24:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_ComponentType_$11578_$",
                          "typeString": "type(enum IComponent.ComponentType)"
                        }
                      },
                      "id": 14160,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "Oracle",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11575,
                      "src": "2933:31:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_ComponentType_$11578",
                        "typeString": "enum IComponent.ComponentType"
                      }
                    },
                    "src": "2915:49:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 14156,
                  "id": 14162,
                  "nodeType": "Return",
                  "src": "2908:56:26"
                }
              ]
            },
            "functionSelector": "9a82f890",
            "id": 14164,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isOracle",
            "nameLocation": "2860:8:26",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 14153,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "2878:8:26"
            },
            "parameters": {
              "id": 14152,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2868:2:26"
            },
            "returnParameters": {
              "id": 14156,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14155,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 14164,
                  "src": "2900:4:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 14154,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "2900:4:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2899:6:26"
            },
            "scope": 14352,
            "src": "2851:116:26",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              11644
            ],
            "body": {
              "id": 14176,
              "nodeType": "Block",
              "src": "3030:63:26",
              "statements": [
                {
                  "expression": {
                    "commonType": {
                      "typeIdentifier": "t_enum$_ComponentType_$11578",
                      "typeString": "enum IComponent.ComponentType"
                    },
                    "id": 14174,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 14170,
                      "name": "_componentType",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13954,
                      "src": "3039:14:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_ComponentType_$11578",
                        "typeString": "enum IComponent.ComponentType"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "expression": {
                        "expression": {
                          "id": 14171,
                          "name": "IComponent",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11675,
                          "src": "3057:10:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_IComponent_$11675_$",
                            "typeString": "type(contract IComponent)"
                          }
                        },
                        "id": 14172,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "ComponentType",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 11578,
                        "src": "3057:24:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_ComponentType_$11578_$",
                          "typeString": "type(enum IComponent.ComponentType)"
                        }
                      },
                      "id": 14173,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "Riskpool",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11577,
                      "src": "3057:33:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_ComponentType_$11578",
                        "typeString": "enum IComponent.ComponentType"
                      }
                    },
                    "src": "3039:51:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 14169,
                  "id": 14175,
                  "nodeType": "Return",
                  "src": "3032:58:26"
                }
              ]
            },
            "functionSelector": "258d560c",
            "id": 14177,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isRiskpool",
            "nameLocation": "2982:10:26",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 14166,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "3002:8:26"
            },
            "parameters": {
              "id": 14165,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2992:2:26"
            },
            "returnParameters": {
              "id": 14169,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14168,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 14177,
                  "src": "3024:4:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 14167,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "3024:4:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3023:6:26"
            },
            "scope": 14352,
            "src": "2973:120:26",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              11650
            ],
            "body": {
              "id": 14186,
              "nodeType": "Block",
              "src": "3166:21:26",
              "statements": [
                {
                  "expression": {
                    "id": 14184,
                    "name": "_registry",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 13957,
                    "src": "3175:9:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IRegistry_$21976",
                      "typeString": "contract IRegistry"
                    }
                  },
                  "functionReturnParameters": 14183,
                  "id": 14185,
                  "nodeType": "Return",
                  "src": "3168:16:26"
                }
              ]
            },
            "functionSelector": "5ab1bd53",
            "id": 14187,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getRegistry",
            "nameLocation": "3110:11:26",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 14179,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "3133:8:26"
            },
            "parameters": {
              "id": 14178,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3121:2:26"
            },
            "returnParameters": {
              "id": 14183,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14182,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 14187,
                  "src": "3155:9:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IRegistry_$21976",
                    "typeString": "contract IRegistry"
                  },
                  "typeName": {
                    "id": 14181,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 14180,
                      "name": "IRegistry",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 21976,
                      "src": "3155:9:26"
                    },
                    "referencedDeclaration": 21976,
                    "src": "3155:9:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IRegistry_$21976",
                      "typeString": "contract IRegistry"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3154:11:26"
            },
            "scope": 14352,
            "src": "3101:86:26",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              11653
            ],
            "body": {
              "id": 14196,
              "nodeType": "Block",
              "src": "3253:20:26",
              "statements": [
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 14193,
                      "name": "_afterPropose",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14271,
                      "src": "3255:13:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 14194,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3255:15:26",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 14195,
                  "nodeType": "ExpressionStatement",
                  "src": "3255:15:26"
                }
              ]
            },
            "functionSelector": "638ce0ba",
            "id": 14197,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 14191,
                "modifierName": {
                  "id": 14190,
                  "name": "onlyComponent",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 13994,
                  "src": "3239:13:26"
                },
                "nodeType": "ModifierInvocation",
                "src": "3239:13:26"
              }
            ],
            "name": "proposalCallback",
            "nameLocation": "3204:16:26",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 14189,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "3230:8:26"
            },
            "parameters": {
              "id": 14188,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3220:2:26"
            },
            "returnParameters": {
              "id": 14192,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3253:0:26"
            },
            "scope": 14352,
            "src": "3195:78:26",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              11656
            ],
            "body": {
              "id": 14206,
              "nodeType": "Block",
              "src": "3337:20:26",
              "statements": [
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 14203,
                      "name": "_afterApprove",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14275,
                      "src": "3339:13:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 14204,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3339:15:26",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 14205,
                  "nodeType": "ExpressionStatement",
                  "src": "3339:15:26"
                }
              ]
            },
            "functionSelector": "1b867c63",
            "id": 14207,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 14201,
                "modifierName": {
                  "id": 14200,
                  "name": "onlyComponent",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 13994,
                  "src": "3323:13:26"
                },
                "nodeType": "ModifierInvocation",
                "src": "3323:13:26"
              }
            ],
            "name": "approvalCallback",
            "nameLocation": "3288:16:26",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 14199,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "3314:8:26"
            },
            "parameters": {
              "id": 14198,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3304:2:26"
            },
            "returnParameters": {
              "id": 14202,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3337:0:26"
            },
            "scope": 14352,
            "src": "3279:78:26",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              11659
            ],
            "body": {
              "id": 14216,
              "nodeType": "Block",
              "src": "3420:20:26",
              "statements": [
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 14213,
                      "name": "_afterDecline",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14279,
                      "src": "3422:13:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 14214,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3422:15:26",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 14215,
                  "nodeType": "ExpressionStatement",
                  "src": "3422:15:26"
                }
              ]
            },
            "functionSelector": "bd1fe5d0",
            "id": 14217,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 14211,
                "modifierName": {
                  "id": 14210,
                  "name": "onlyComponent",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 13994,
                  "src": "3406:13:26"
                },
                "nodeType": "ModifierInvocation",
                "src": "3406:13:26"
              }
            ],
            "name": "declineCallback",
            "nameLocation": "3372:15:26",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 14209,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "3397:8:26"
            },
            "parameters": {
              "id": 14208,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3387:2:26"
            },
            "returnParameters": {
              "id": 14212,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3420:0:26"
            },
            "scope": 14352,
            "src": "3363:77:26",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              11662
            ],
            "body": {
              "id": 14226,
              "nodeType": "Block",
              "src": "3503:20:26",
              "statements": [
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 14223,
                      "name": "_afterSuspend",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14283,
                      "src": "3505:13:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 14224,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3505:15:26",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 14225,
                  "nodeType": "ExpressionStatement",
                  "src": "3505:15:26"
                }
              ]
            },
            "functionSelector": "b3fca9bd",
            "id": 14227,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 14221,
                "modifierName": {
                  "id": 14220,
                  "name": "onlyComponent",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 13994,
                  "src": "3489:13:26"
                },
                "nodeType": "ModifierInvocation",
                "src": "3489:13:26"
              }
            ],
            "name": "suspendCallback",
            "nameLocation": "3455:15:26",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 14219,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "3480:8:26"
            },
            "parameters": {
              "id": 14218,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3470:2:26"
            },
            "returnParameters": {
              "id": 14222,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3503:0:26"
            },
            "scope": 14352,
            "src": "3446:77:26",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              11665
            ],
            "body": {
              "id": 14236,
              "nodeType": "Block",
              "src": "3585:19:26",
              "statements": [
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 14233,
                      "name": "_afterResume",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14287,
                      "src": "3587:12:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 14234,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3587:14:26",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 14235,
                  "nodeType": "ExpressionStatement",
                  "src": "3587:14:26"
                }
              ]
            },
            "functionSelector": "a18f5ae2",
            "id": 14237,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 14231,
                "modifierName": {
                  "id": 14230,
                  "name": "onlyComponent",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 13994,
                  "src": "3571:13:26"
                },
                "nodeType": "ModifierInvocation",
                "src": "3571:13:26"
              }
            ],
            "name": "resumeCallback",
            "nameLocation": "3538:14:26",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 14229,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "3562:8:26"
            },
            "parameters": {
              "id": 14228,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3552:2:26"
            },
            "returnParameters": {
              "id": 14232,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3585:0:26"
            },
            "scope": 14352,
            "src": "3529:75:26",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              11668
            ],
            "body": {
              "id": 14246,
              "nodeType": "Block",
              "src": "3665:18:26",
              "statements": [
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 14243,
                      "name": "_afterPause",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14291,
                      "src": "3667:11:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 14244,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3667:13:26",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 14245,
                  "nodeType": "ExpressionStatement",
                  "src": "3667:13:26"
                }
              ]
            },
            "functionSelector": "d73cd992",
            "id": 14247,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 14241,
                "modifierName": {
                  "id": 14240,
                  "name": "onlyComponent",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 13994,
                  "src": "3651:13:26"
                },
                "nodeType": "ModifierInvocation",
                "src": "3651:13:26"
              }
            ],
            "name": "pauseCallback",
            "nameLocation": "3619:13:26",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 14239,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "3642:8:26"
            },
            "parameters": {
              "id": 14238,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3632:2:26"
            },
            "returnParameters": {
              "id": 14242,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3665:0:26"
            },
            "scope": 14352,
            "src": "3610:73:26",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              11671
            ],
            "body": {
              "id": 14256,
              "nodeType": "Block",
              "src": "3746:20:26",
              "statements": [
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 14253,
                      "name": "_afterUnpause",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14295,
                      "src": "3748:13:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 14254,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3748:15:26",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 14255,
                  "nodeType": "ExpressionStatement",
                  "src": "3748:15:26"
                }
              ]
            },
            "functionSelector": "59dacc6a",
            "id": 14257,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 14251,
                "modifierName": {
                  "id": 14250,
                  "name": "onlyComponent",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 13994,
                  "src": "3732:13:26"
                },
                "nodeType": "ModifierInvocation",
                "src": "3732:13:26"
              }
            ],
            "name": "unpauseCallback",
            "nameLocation": "3698:15:26",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 14249,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "3723:8:26"
            },
            "parameters": {
              "id": 14248,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3713:2:26"
            },
            "returnParameters": {
              "id": 14252,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3746:0:26"
            },
            "scope": 14352,
            "src": "3689:77:26",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              11674
            ],
            "body": {
              "id": 14266,
              "nodeType": "Block",
              "src": "3829:20:26",
              "statements": [
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 14263,
                      "name": "_afterArchive",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14299,
                      "src": "3831:13:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 14264,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3831:15:26",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 14265,
                  "nodeType": "ExpressionStatement",
                  "src": "3831:15:26"
                }
              ]
            },
            "functionSelector": "be169e7e",
            "id": 14267,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 14261,
                "modifierName": {
                  "id": 14260,
                  "name": "onlyComponent",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 13994,
                  "src": "3815:13:26"
                },
                "nodeType": "ModifierInvocation",
                "src": "3815:13:26"
              }
            ],
            "name": "archiveCallback",
            "nameLocation": "3781:15:26",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 14259,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "3806:8:26"
            },
            "parameters": {
              "id": 14258,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3796:2:26"
            },
            "returnParameters": {
              "id": 14262,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3829:0:26"
            },
            "scope": 14352,
            "src": "3772:77:26",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 14270,
              "nodeType": "Block",
              "src": "4020:2:26",
              "statements": []
            },
            "id": 14271,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_afterPropose",
            "nameLocation": "3987:13:26",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 14268,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4000:2:26"
            },
            "returnParameters": {
              "id": 14269,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4020:0:26"
            },
            "scope": 14352,
            "src": "3978:44:26",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 14274,
              "nodeType": "Block",
              "src": "4070:2:26",
              "statements": []
            },
            "id": 14275,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_afterApprove",
            "nameLocation": "4037:13:26",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 14272,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4050:2:26"
            },
            "returnParameters": {
              "id": 14273,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4070:0:26"
            },
            "scope": 14352,
            "src": "4028:44:26",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 14278,
              "nodeType": "Block",
              "src": "4120:2:26",
              "statements": []
            },
            "id": 14279,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_afterDecline",
            "nameLocation": "4087:13:26",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 14276,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4100:2:26"
            },
            "returnParameters": {
              "id": 14277,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4120:0:26"
            },
            "scope": 14352,
            "src": "4078:44:26",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 14282,
              "nodeType": "Block",
              "src": "4170:2:26",
              "statements": []
            },
            "id": 14283,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_afterSuspend",
            "nameLocation": "4137:13:26",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 14280,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4150:2:26"
            },
            "returnParameters": {
              "id": 14281,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4170:0:26"
            },
            "scope": 14352,
            "src": "4128:44:26",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 14286,
              "nodeType": "Block",
              "src": "4219:2:26",
              "statements": []
            },
            "id": 14287,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_afterResume",
            "nameLocation": "4187:12:26",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 14284,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4199:2:26"
            },
            "returnParameters": {
              "id": 14285,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4219:0:26"
            },
            "scope": 14352,
            "src": "4178:43:26",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 14290,
              "nodeType": "Block",
              "src": "4267:2:26",
              "statements": []
            },
            "id": 14291,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_afterPause",
            "nameLocation": "4236:11:26",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 14288,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4247:2:26"
            },
            "returnParameters": {
              "id": 14289,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4267:0:26"
            },
            "scope": 14352,
            "src": "4227:42:26",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 14294,
              "nodeType": "Block",
              "src": "4317:2:26",
              "statements": []
            },
            "id": 14295,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_afterUnpause",
            "nameLocation": "4284:13:26",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 14292,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4297:2:26"
            },
            "returnParameters": {
              "id": 14293,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4317:0:26"
            },
            "scope": 14352,
            "src": "4275:44:26",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 14298,
              "nodeType": "Block",
              "src": "4367:2:26",
              "statements": []
            },
            "id": 14299,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_afterArchive",
            "nameLocation": "4334:13:26",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 14296,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4347:2:26"
            },
            "returnParameters": {
              "id": 14297,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4367:0:26"
            },
            "scope": 14352,
            "src": "4325:44:26",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 14311,
              "nodeType": "Block",
              "src": "4431:72:26",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "hexValue": "416363657373",
                            "id": 14307,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "4477:8:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_662ef9f10158779adc6a36d83dac352a0d38be4aaefa069e4f4fdcebe6a5d3ee",
                              "typeString": "literal_string \"Access\""
                            },
                            "value": "Access"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_stringliteral_662ef9f10158779adc6a36d83dac352a0d38be4aaefa069e4f4fdcebe6a5d3ee",
                              "typeString": "literal_string \"Access\""
                            }
                          ],
                          "id": 14306,
                          "name": "_getContractAddress",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14351,
                          "src": "4457:19:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_address_$",
                            "typeString": "function (bytes32) view returns (address)"
                          }
                        },
                        "id": 14308,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4457:29:26",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 14305,
                      "name": "IAccess",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 22927,
                      "src": "4449:7:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_IAccess_$22927_$",
                        "typeString": "type(contract IAccess)"
                      }
                    },
                    "id": 14309,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4449:38:26",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IAccess_$22927",
                      "typeString": "contract IAccess"
                    }
                  },
                  "functionReturnParameters": 14304,
                  "id": 14310,
                  "nodeType": "Return",
                  "src": "4442:45:26"
                }
              ]
            },
            "id": 14312,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_getAccess",
            "nameLocation": "4386:10:26",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 14300,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4396:2:26"
            },
            "returnParameters": {
              "id": 14304,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14303,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 14312,
                  "src": "4422:7:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IAccess_$22927",
                    "typeString": "contract IAccess"
                  },
                  "typeName": {
                    "id": 14302,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 14301,
                      "name": "IAccess",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 22927,
                      "src": "4422:7:26"
                    },
                    "referencedDeclaration": 22927,
                    "src": "4422:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IAccess_$22927",
                      "typeString": "contract IAccess"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4421:9:26"
            },
            "scope": 14352,
            "src": "4377:126:26",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 14324,
              "nodeType": "Block",
              "src": "4583:90:26",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "hexValue": "496e7374616e636553657276696365",
                            "id": 14320,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "4638:17:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_9d0370d7b33c0a7e946fd67f2013156c598b4d6a70b1490bc73aacf4dc1a6f52",
                              "typeString": "literal_string \"InstanceService\""
                            },
                            "value": "InstanceService"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_stringliteral_9d0370d7b33c0a7e946fd67f2013156c598b4d6a70b1490bc73aacf4dc1a6f52",
                              "typeString": "literal_string \"InstanceService\""
                            }
                          ],
                          "id": 14319,
                          "name": "_getContractAddress",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14351,
                          "src": "4618:19:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_address_$",
                            "typeString": "function (bytes32) view returns (address)"
                          }
                        },
                        "id": 14321,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4618:38:26",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 14318,
                      "name": "IInstanceService",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14934,
                      "src": "4601:16:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_IInstanceService_$14934_$",
                        "typeString": "type(contract IInstanceService)"
                      }
                    },
                    "id": 14322,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4601:56:26",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IInstanceService_$14934",
                      "typeString": "contract IInstanceService"
                    }
                  },
                  "functionReturnParameters": 14317,
                  "id": 14323,
                  "nodeType": "Return",
                  "src": "4594:63:26"
                }
              ]
            },
            "id": 14325,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_getInstanceService",
            "nameLocation": "4520:19:26",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 14313,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4539:2:26"
            },
            "returnParameters": {
              "id": 14317,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14316,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 14325,
                  "src": "4565:16:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IInstanceService_$14934",
                    "typeString": "contract IInstanceService"
                  },
                  "typeName": {
                    "id": 14315,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 14314,
                      "name": "IInstanceService",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 14934,
                      "src": "4565:16:26"
                    },
                    "referencedDeclaration": 14934,
                    "src": "4565:16:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IInstanceService_$14934",
                      "typeString": "contract IInstanceService"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4564:18:26"
            },
            "scope": 14352,
            "src": "4511:162:26",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 14337,
              "nodeType": "Block",
              "src": "4765:102:26",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "hexValue": "436f6d706f6e656e744f776e657253657276696365",
                            "id": 14333,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "4826:23:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_95855e0e8f5cd64ffc781762663437a44ef7554eea00fdb413a3a655c097a675",
                              "typeString": "literal_string \"ComponentOwnerService\""
                            },
                            "value": "ComponentOwnerService"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_stringliteral_95855e0e8f5cd64ffc781762663437a44ef7554eea00fdb413a3a655c097a675",
                              "typeString": "literal_string \"ComponentOwnerService\""
                            }
                          ],
                          "id": 14332,
                          "name": "_getContractAddress",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14351,
                          "src": "4806:19:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_address_$",
                            "typeString": "function (bytes32) view returns (address)"
                          }
                        },
                        "id": 14334,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4806:44:26",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 14331,
                      "name": "IComponentOwnerService",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 23015,
                      "src": "4783:22:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_IComponentOwnerService_$23015_$",
                        "typeString": "type(contract IComponentOwnerService)"
                      }
                    },
                    "id": 14335,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4783:68:26",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IComponentOwnerService_$23015",
                      "typeString": "contract IComponentOwnerService"
                    }
                  },
                  "functionReturnParameters": 14330,
                  "id": 14336,
                  "nodeType": "Return",
                  "src": "4776:75:26"
                }
              ]
            },
            "id": 14338,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_getComponentOwnerService",
            "nameLocation": "4690:25:26",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 14326,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4715:2:26"
            },
            "returnParameters": {
              "id": 14330,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14329,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 14338,
                  "src": "4741:22:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IComponentOwnerService_$23015",
                    "typeString": "contract IComponentOwnerService"
                  },
                  "typeName": {
                    "id": 14328,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 14327,
                      "name": "IComponentOwnerService",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 23015,
                      "src": "4741:22:26"
                    },
                    "referencedDeclaration": 23015,
                    "src": "4741:22:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IComponentOwnerService_$23015",
                      "typeString": "contract IComponentOwnerService"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4740:24:26"
            },
            "scope": 14352,
            "src": "4681:186:26",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 14350,
              "nodeType": "Block",
              "src": "4958:62:26",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 14347,
                        "name": "contractName",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14340,
                        "src": "4999:12:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "expression": {
                        "id": 14345,
                        "name": "_registry",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13957,
                        "src": "4977:9:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IRegistry_$21976",
                          "typeString": "contract IRegistry"
                        }
                      },
                      "id": 14346,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "getContract",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21949,
                      "src": "4977:21:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_bytes32_$returns$_t_address_$",
                        "typeString": "function (bytes32) view external returns (address)"
                      }
                    },
                    "id": 14348,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4977:35:26",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 14344,
                  "id": 14349,
                  "nodeType": "Return",
                  "src": "4970:42:26"
                }
              ]
            },
            "id": 14351,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_getContractAddress",
            "nameLocation": "4884:19:26",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 14341,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14340,
                  "mutability": "mutable",
                  "name": "contractName",
                  "nameLocation": "4912:12:26",
                  "nodeType": "VariableDeclaration",
                  "scope": 14351,
                  "src": "4904:20:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 14339,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "4904:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4903:22:26"
            },
            "returnParameters": {
              "id": 14344,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14343,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 14351,
                  "src": "4949:7:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 14342,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4949:7:26",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4948:9:26"
            },
            "scope": 14352,
            "src": "4875:145:26",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          }
        ],
        "scope": 14353,
        "src": "461:4564:26"
      }
    ],
    "src": "40:4987:26"
  },
  "bytecode": "",
  "bytecodeSha1": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
  "compiler": {
    "evm_version": "istanbul",
    "optimizer": {
      "enabled": true,
      "runs": 200
    },
    "version": "0.8.2+commit.661d1103"
  },
  "contractName": "Component",
  "coverageMap": {
    "branches": {},
    "statements": {}
  },
  "dependencies": [
    "OpenZeppelin/openzeppelin-contracts@4.7.3/Context",
    "etherisc/gif-interface@3b0002a/IAccess",
    "etherisc/gif-interface@3b0002a/IBundleToken",
    "etherisc/gif-interface@3b0002a/IComponent",
    "etherisc/gif-interface@3b0002a/IComponentEvents",
    "etherisc/gif-interface@3b0002a/IComponentOwnerService",
    "OpenZeppelin/openzeppelin-contracts@4.7.3/IERC165",
    "OpenZeppelin/openzeppelin-contracts@4.7.3/IERC20",
    "OpenZeppelin/openzeppelin-contracts@4.7.3/IERC721",
    "etherisc/gif-interface@3b0002a/IInstanceOperatorService",
    "etherisc/gif-interface@3b0002a/IInstanceService",
    "etherisc/gif-interface@3b0002a/IOracleService",
    "etherisc/gif-interface@3b0002a/IProductService",
    "etherisc/gif-interface@3b0002a/IRegistry",
    "etherisc/gif-interface@3b0002a/IRiskpoolService",
    "OpenZeppelin/openzeppelin-contracts@4.7.3/Ownable"
  ],
  "deployedBytecode": "",
  "deployedSourceMap": "",
  "language": "Solidity",
  "natspec": {
    "kind": "dev",
    "methods": {
      "owner()": {
        "details": "Returns the address of the current owner."
      },
      "renounceOwnership()": {
        "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner."
      },
      "transferOwnership(address)": {
        "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."
      }
    },
    "version": 1
  },
  "offset": [
    461,
    5025
  ],
  "opcodes": "",
  "pcMap": {},
  "sha1": "a26ce02347dd3f3a70532c9fcdb8fe9f6f804282",
  "source": "// SPDX-License-Identifier: Apache-2.0\npragma solidity 0.8.2;\n\nimport \"./IComponent.sol\";\nimport \"../modules/IAccess.sol\";\nimport \"../modules/IComponentEvents.sol\";\nimport \"../modules/IRegistry.sol\";\nimport \"../services/IComponentOwnerService.sol\";\nimport \"../services/IInstanceService.sol\";\nimport \"@openzeppelin/contracts/access/Ownable.sol\";\n\n\n// https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/GUIDELINES.md#style-guidelines\nabstract contract Component is \n    IComponent,\n    IComponentEvents,\n    Ownable \n{\n    bytes32 private _componentName;\n    uint256 private _componentId;\n    IComponent.ComponentType private _componentType;\n\n    IRegistry private _registry;\n    IAccess private _access;\n    IComponentOwnerService private _componentOwnerService;\n    IInstanceService private _instanceService;\n\n    modifier onlyInstanceOperatorService() {\n        require(\n             _msgSender() == _getContractAddress(\"InstanceOperatorService\"),\n            \"ERROR:CMP-001:NOT_INSTANCE_OPERATOR_SERVICE\");\n        _;\n    }\n\n    modifier onlyComponent() {\n        require(\n             _msgSender() == _getContractAddress(\"Component\"),\n            \"ERROR:CMP-002:NOT_COMPONENT\");\n        _;\n    }\n\n    modifier onlyComponentOwnerService() {\n        require(\n             _msgSender() == address(_componentOwnerService),\n            \"ERROR:CMP-003:NOT_COMPONENT_OWNER_SERVICE\");\n        _;\n    }\n\n    constructor(\n        bytes32 name,\n        IComponent.ComponentType componentType,\n        address registry\n    )\n        Ownable()\n    {\n        require(registry != address(0), \"ERROR:CMP-004:REGISTRY_ADDRESS_ZERO\");\n\n        _registry = IRegistry(registry);\n        _access = _getAccess();\n        _componentOwnerService = _getComponentOwnerService();\n        _instanceService = _getInstanceService();\n\n        _componentName = name;\n        _componentType = componentType;\n\n        emit LogComponentCreated(\n            _componentName, \n            _componentType, \n            address(this), \n            address(_registry));\n    }\n\n    function setId(uint256 id) external override onlyComponent { _componentId = id; }\n\n    function getName() public override view returns(bytes32) { return _componentName; }\n    function getId() public override view returns(uint256) { return _componentId; }\n    function getType() public override view returns(IComponent.ComponentType) { return _componentType; }\n    function getState() public override view returns(IComponent.ComponentState) { return _instanceService.getComponentState(_componentId); }\n    function getOwner() public override view returns(address) { return owner(); }\n\n    function isProduct() public override view returns(bool) { return _componentType == IComponent.ComponentType.Product; }\n    function isOracle() public override view returns(bool) { return _componentType == IComponent.ComponentType.Oracle; }\n    function isRiskpool() public override view returns(bool) { return _componentType == IComponent.ComponentType.Riskpool; }\n\n    function getRegistry() external override view returns(IRegistry) { return _registry; }\n\n    function proposalCallback() public override onlyComponent { _afterPropose(); }\n    function approvalCallback() public override onlyComponent { _afterApprove(); }\n    function declineCallback() public override onlyComponent { _afterDecline(); }\n    function suspendCallback() public override onlyComponent { _afterSuspend(); }\n    function resumeCallback() public override onlyComponent { _afterResume(); }\n    function pauseCallback() public override onlyComponent { _afterPause(); }\n    function unpauseCallback() public override onlyComponent { _afterUnpause(); }\n    function archiveCallback() public override onlyComponent { _afterArchive(); }\n    \n    // these functions are intended to be overwritten to implement\n    // component specific notification handling\n    function _afterPropose() internal virtual {}\n    function _afterApprove() internal virtual {}\n    function _afterDecline() internal virtual {}\n    function _afterSuspend() internal virtual {}\n    function _afterResume() internal virtual {}\n    function _afterPause() internal virtual {}\n    function _afterUnpause() internal virtual {}\n    function _afterArchive() internal virtual {}\n\n    function _getAccess() internal view returns (IAccess) {\n        return IAccess(_getContractAddress(\"Access\"));        \n    }\n\n    function _getInstanceService() internal view returns (IInstanceService) {\n        return IInstanceService(_getContractAddress(\"InstanceService\"));        \n    }\n\n    function _getComponentOwnerService() internal view returns (IComponentOwnerService) {\n        return IComponentOwnerService(_getContractAddress(\"ComponentOwnerService\"));        \n    }\n\n    function _getContractAddress(bytes32 contractName) internal view returns (address) { \n        return _registry.getContract(contractName);\n    }\n\n}\n",
  "sourceMap": "",
  "sourcePath": "/home/vscode/.brownie/packages/etherisc/gif-interface@3b0002a/contracts/components/Component.sol",
  "type": "contract"
}