{
  "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": false,
          "internalType": "uint256",
          "name": "componentId",
          "type": "uint256"
        }
      ],
      "name": "LogOracleApproved",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "oracleAddress",
          "type": "address"
        }
      ],
      "name": "LogOracleCreated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "componentId",
          "type": "uint256"
        }
      ],
      "name": "LogOracleDeclined",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "componentId",
          "type": "uint256"
        }
      ],
      "name": "LogOracleProposed",
      "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": [
        {
          "internalType": "uint256",
          "name": "requestId",
          "type": "uint256"
        }
      ],
      "name": "cancel",
      "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": [
        {
          "internalType": "uint256",
          "name": "requestId",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "input",
          "type": "bytes"
        }
      ],
      "name": "request",
      "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",
    "1": "/home/vscode/.brownie/packages/OpenZeppelin/openzeppelin-contracts@4.7.3/contracts/token/ERC20/IERC20.sol",
    "11": "contracts/components/Oracle.sol",
    "14": "contracts/modules/IAccess.sol",
    "16": "contracts/modules/IComponentEvents.sol",
    "2": "/home/vscode/.brownie/packages/OpenZeppelin/openzeppelin-contracts@4.7.3/contracts/token/ERC721/IERC721.sol",
    "21": "contracts/modules/IRegistry.sol",
    "23": "contracts/services/IComponentOwnerService.sol",
    "24": "contracts/services/IInstanceOperatorService.sol",
    "25": "contracts/services/IInstanceService.sol",
    "26": "contracts/services/IOracleService.sol",
    "27": "contracts/services/IProductService.sol",
    "28": "contracts/services/IRiskpoolService.sol",
    "3": "/home/vscode/.brownie/packages/OpenZeppelin/openzeppelin-contracts@4.7.3/contracts/utils/Context.sol",
    "30": "contracts/tokens/IBundleToken.sol",
    "4": "/home/vscode/.brownie/packages/OpenZeppelin/openzeppelin-contracts@4.7.3/contracts/utils/introspection/IERC165.sol",
    "6": "contracts/components/Component.sol",
    "7": "contracts/components/IComponent.sol",
    "8": "contracts/components/IOracle.sol"
  },
  "ast": {
    "absolutePath": "contracts/components/Oracle.sol",
    "exportedSymbols": {
      "Component": [
        708
      ],
      "Context": [
        4978
      ],
      "IAccess": [
        2660
      ],
      "IBundle": [
        2844
      ],
      "IBundleToken": [
        4649
      ],
      "IComponent": [
        812
      ],
      "IComponentEvents": [
        2897
      ],
      "IComponentOwnerService": [
        3833
      ],
      "IERC165": [
        4990
      ],
      "IERC20": [
        4956
      ],
      "IERC721": [
        4878
      ],
      "IInstanceOperatorService": [
        3984
      ],
      "IInstanceService": [
        4333
      ],
      "IOracle": [
        846
      ],
      "IOracleService": [
        4343
      ],
      "IPolicy": [
        3257
      ],
      "IPool": [
        3373
      ],
      "IProductService": [
        4488
      ],
      "IRegistry": [
        3538
      ],
      "IRiskpoolService": [
        4594
      ],
      "ITreasury": [
        3798
      ],
      "Oracle": [
        1238
      ],
      "Ownable": [
        4762
      ]
    },
    "id": 1239,
    "license": "Apache-2.0",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 1138,
        "literals": [
          "solidity",
          "0.8",
          ".2"
        ],
        "nodeType": "PragmaDirective",
        "src": "39:22:11"
      },
      {
        "absolutePath": "contracts/components/IOracle.sol",
        "file": "./IOracle.sol",
        "id": 1139,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 1239,
        "sourceUnit": 847,
        "src": "63:23:11",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "contracts/components/Component.sol",
        "file": "./Component.sol",
        "id": 1140,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 1239,
        "sourceUnit": 709,
        "src": "87:25:11",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "contracts/components/IComponent.sol",
        "file": "./IComponent.sol",
        "id": 1141,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 1239,
        "sourceUnit": 813,
        "src": "113:26:11",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "contracts/services/IOracleService.sol",
        "file": "../services/IOracleService.sol",
        "id": 1142,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 1239,
        "sourceUnit": 4344,
        "src": "140:40:11",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": true,
        "baseContracts": [
          {
            "baseName": {
              "id": 1143,
              "name": "IOracle",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 846,
              "src": "214:7:11"
            },
            "id": 1144,
            "nodeType": "InheritanceSpecifier",
            "src": "214:7:11"
          },
          {
            "baseName": {
              "id": 1145,
              "name": "Component",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 708,
              "src": "228:9:11"
            },
            "id": 1146,
            "nodeType": "InheritanceSpecifier",
            "src": "228:9:11"
          }
        ],
        "contractDependencies": [
          708,
          812,
          846,
          2897,
          4762,
          4978
        ],
        "contractKind": "contract",
        "fullyImplemented": false,
        "id": 1238,
        "linearizedBaseContracts": [
          1238,
          708,
          4762,
          4978,
          2897,
          846,
          812
        ],
        "name": "Oracle",
        "nameLocation": "200:6:11",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": false,
            "id": 1149,
            "mutability": "mutable",
            "name": "_oracleService",
            "nameLocation": "271:14:11",
            "nodeType": "VariableDeclaration",
            "scope": 1238,
            "src": "248:37:11",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_IOracleService_$4343",
              "typeString": "contract IOracleService"
            },
            "typeName": {
              "id": 1148,
              "nodeType": "UserDefinedTypeName",
              "pathNode": {
                "id": 1147,
                "name": "IOracleService",
                "nodeType": "IdentifierPath",
                "referencedDeclaration": 4343,
                "src": "248:14:11"
              },
              "referencedDeclaration": 4343,
              "src": "248:14:11",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IOracleService_$4343",
                "typeString": "contract IOracleService"
              }
            },
            "visibility": "private"
          },
          {
            "body": {
              "id": 1162,
              "nodeType": "Block",
              "src": "311:147:11",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 1157,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 1152,
                            "name": "_msgSender",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4968,
                            "src": "343:10:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                              "typeString": "function () view returns (address)"
                            }
                          },
                          "id": 1153,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "343:12:11",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "5175657279",
                              "id": 1155,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "379:7:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_de27146501ae3a78760bc5f3cf670e34e42f94d4009fee9f620352506ade7ceb",
                                "typeString": "literal_string \"Query\""
                              },
                              "value": "Query"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_stringliteral_de27146501ae3a78760bc5f3cf670e34e42f94d4009fee9f620352506ade7ceb",
                                "typeString": "literal_string \"Query\""
                              }
                            ],
                            "id": 1154,
                            "name": "_getContractAddress",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 707,
                            "src": "359:19:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_address_$",
                              "typeString": "function (bytes32) view returns (address)"
                            }
                          },
                          "id": 1156,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "359:28:11",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "343:44:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4552524f523a4f52412d3030313a4143434553535f44454e494544",
                        "id": 1158,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "401:29:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_a3214b105f8e4fc42f2f6a7934ad3971d0ae822439cb6ceb58541fba4df7e8c0",
                          "typeString": "literal_string \"ERROR:ORA-001:ACCESS_DENIED\""
                        },
                        "value": "ERROR:ORA-001:ACCESS_DENIED"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_a3214b105f8e4fc42f2f6a7934ad3971d0ae822439cb6ceb58541fba4df7e8c0",
                          "typeString": "literal_string \"ERROR:ORA-001:ACCESS_DENIED\""
                        }
                      ],
                      "id": 1151,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "321:7:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1159,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "321:119:11",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1160,
                  "nodeType": "ExpressionStatement",
                  "src": "321:119:11"
                },
                {
                  "id": 1161,
                  "nodeType": "PlaceholderStatement",
                  "src": "450:1:11"
                }
              ]
            },
            "id": 1163,
            "name": "onlyQuery",
            "nameLocation": "301:9:11",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 1150,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "311:0:11"
            },
            "src": "292:166:11",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1191,
              "nodeType": "Block",
              "src": "590:132:11",
              "statements": [
                {
                  "expression": {
                    "id": 1182,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 1176,
                      "name": "_oracleService",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1149,
                      "src": "600:14:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IOracleService_$4343",
                        "typeString": "contract IOracleService"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "arguments": [
                            {
                              "hexValue": "4f7261636c6553657276696365",
                              "id": 1179,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "652:15:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_b10ffebb48b8cc789ab1dfe7a210b91b4cf99b6d74d0c01c069195f8f6b41b06",
                                "typeString": "literal_string \"OracleService\""
                              },
                              "value": "OracleService"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_stringliteral_b10ffebb48b8cc789ab1dfe7a210b91b4cf99b6d74d0c01c069195f8f6b41b06",
                                "typeString": "literal_string \"OracleService\""
                              }
                            ],
                            "id": 1178,
                            "name": "_getContractAddress",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 707,
                            "src": "632:19:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_address_$",
                              "typeString": "function (bytes32) view returns (address)"
                            }
                          },
                          "id": 1180,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "632:36:11",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 1177,
                        "name": "IOracleService",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4343,
                        "src": "617:14:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_IOracleService_$4343_$",
                          "typeString": "type(contract IOracleService)"
                        }
                      },
                      "id": 1181,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "617:52:11",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IOracleService_$4343",
                        "typeString": "contract IOracleService"
                      }
                    },
                    "src": "600:69:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IOracleService_$4343",
                      "typeString": "contract IOracleService"
                    }
                  },
                  "id": 1183,
                  "nodeType": "ExpressionStatement",
                  "src": "600:69:11"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 1187,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -28,
                            "src": "709:4:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Oracle_$1238",
                              "typeString": "contract Oracle"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_Oracle_$1238",
                              "typeString": "contract Oracle"
                            }
                          ],
                          "id": 1186,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "701:7:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 1185,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "701:7:11",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 1188,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "701:13:11",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 1184,
                      "name": "LogOracleCreated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 821,
                      "src": "684:16:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 1189,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "684:31:11",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1190,
                  "nodeType": "EmitStatement",
                  "src": "679:36:11"
                }
              ]
            },
            "id": 1192,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [
              {
                "arguments": [
                  {
                    "id": 1170,
                    "name": "name",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1165,
                    "src": "548:4:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  {
                    "expression": {
                      "id": 1171,
                      "name": "ComponentType",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 715,
                      "src": "554:13:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_enum$_ComponentType_$715_$",
                        "typeString": "type(enum IComponent.ComponentType)"
                      }
                    },
                    "id": 1172,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "memberName": "Oracle",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 712,
                    "src": "554:20:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_ComponentType_$715",
                      "typeString": "enum IComponent.ComponentType"
                    }
                  },
                  {
                    "id": 1173,
                    "name": "registry",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1167,
                    "src": "576:8:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 1174,
                "modifierName": {
                  "id": 1169,
                  "name": "Component",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 708,
                  "src": "538:9:11"
                },
                "nodeType": "ModifierInvocation",
                "src": "538:47:11"
              }
            ],
            "name": "",
            "nameLocation": "-1:-1:-1",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1168,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1165,
                  "mutability": "mutable",
                  "name": "name",
                  "nameLocation": "493:4:11",
                  "nodeType": "VariableDeclaration",
                  "scope": 1192,
                  "src": "485:12:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 1164,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "485:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1167,
                  "mutability": "mutable",
                  "name": "registry",
                  "nameLocation": "515:8:11",
                  "nodeType": "VariableDeclaration",
                  "scope": 1192,
                  "src": "507:16:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1166,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "507:7:11",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "475:54:11"
            },
            "returnParameters": {
              "id": 1175,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "590:0:11"
            },
            "scope": 1238,
            "src": "464:258:11",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "baseFunctions": [
              631
            ],
            "body": {
              "id": 1201,
              "nodeType": "Block",
              "src": "820:50:11",
              "statements": [
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 1197,
                          "name": "getId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 461,
                          "src": "854:5:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                            "typeString": "function () view returns (uint256)"
                          }
                        },
                        "id": 1198,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "854:7:11",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 1196,
                      "name": "LogOracleApproved",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 829,
                      "src": "836:17:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$returns$__$",
                        "typeString": "function (uint256)"
                      }
                    },
                    "id": 1199,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "836:26:11",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1200,
                  "nodeType": "EmitStatement",
                  "src": "831:31:11"
                }
              ]
            },
            "id": 1202,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_afterApprove",
            "nameLocation": "786:13:11",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 1194,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "811:8:11"
            },
            "parameters": {
              "id": 1193,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "799:2:11"
            },
            "returnParameters": {
              "id": 1195,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "820:0:11"
            },
            "scope": 1238,
            "src": "777:93:11",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "baseFunctions": [
              627
            ],
            "body": {
              "id": 1211,
              "nodeType": "Block",
              "src": "919:36:11",
              "statements": [
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 1207,
                          "name": "getId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 461,
                          "src": "944:5:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                            "typeString": "function () view returns (uint256)"
                          }
                        },
                        "id": 1208,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "944:7:11",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 1206,
                      "name": "LogOracleProposed",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 825,
                      "src": "926:17:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$returns$__$",
                        "typeString": "function (uint256)"
                      }
                    },
                    "id": 1209,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "926:26:11",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1210,
                  "nodeType": "EmitStatement",
                  "src": "921:31:11"
                }
              ]
            },
            "id": 1212,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_afterPropose",
            "nameLocation": "885:13:11",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 1204,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "910:8:11"
            },
            "parameters": {
              "id": 1203,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "898:2:11"
            },
            "returnParameters": {
              "id": 1205,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "919:0:11"
            },
            "scope": 1238,
            "src": "876:79:11",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "baseFunctions": [
              635
            ],
            "body": {
              "id": 1221,
              "nodeType": "Block",
              "src": "1003:36:11",
              "statements": [
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 1217,
                          "name": "getId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 461,
                          "src": "1028:5:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                            "typeString": "function () view returns (uint256)"
                          }
                        },
                        "id": 1218,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1028:7:11",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 1216,
                      "name": "LogOracleDeclined",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 833,
                      "src": "1010:17:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$returns$__$",
                        "typeString": "function (uint256)"
                      }
                    },
                    "id": 1219,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1010:26:11",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1220,
                  "nodeType": "EmitStatement",
                  "src": "1005:31:11"
                }
              ]
            },
            "id": 1222,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_afterDecline",
            "nameLocation": "969:13:11",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 1214,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "994:8:11"
            },
            "parameters": {
              "id": 1213,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "982:2:11"
            },
            "returnParameters": {
              "id": 1215,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1003:0:11"
            },
            "scope": 1238,
            "src": "960:79:11",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1236,
              "nodeType": "Block",
              "src": "1110:56:11",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 1232,
                        "name": "requestId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1224,
                        "src": "1143:9:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 1233,
                        "name": "data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1226,
                        "src": "1154:4:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "expression": {
                        "id": 1229,
                        "name": "_oracleService",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1149,
                        "src": "1120:14:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IOracleService_$4343",
                          "typeString": "contract IOracleService"
                        }
                      },
                      "id": 1231,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "respond",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4342,
                      "src": "1120:22:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$_t_bytes_memory_ptr_$returns$__$",
                        "typeString": "function (uint256,bytes memory) external"
                      }
                    },
                    "id": 1234,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1120:39:11",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1235,
                  "nodeType": "ExpressionStatement",
                  "src": "1120:39:11"
                }
              ]
            },
            "id": 1237,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_respond",
            "nameLocation": "1054:8:11",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1227,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1224,
                  "mutability": "mutable",
                  "name": "requestId",
                  "nameLocation": "1071:9:11",
                  "nodeType": "VariableDeclaration",
                  "scope": 1237,
                  "src": "1063:17:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1223,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1063:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1226,
                  "mutability": "mutable",
                  "name": "data",
                  "nameLocation": "1095:4:11",
                  "nodeType": "VariableDeclaration",
                  "scope": 1237,
                  "src": "1082:17:11",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1225,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "1082:5:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1062:38:11"
            },
            "returnParameters": {
              "id": 1228,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1110:0:11"
            },
            "scope": 1238,
            "src": "1045:121:11",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          }
        ],
        "scope": 1239,
        "src": "182:990:11"
      }
    ],
    "src": "39:1134:11"
  },
  "bytecode": "",
  "bytecodeSha1": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
  "compiler": {
    "evm_version": "istanbul",
    "optimizer": {
      "enabled": true,
      "runs": 200
    },
    "version": "0.8.2+commit.661d1103"
  },
  "contractName": "Oracle",
  "coverageMap": {
    "branches": {},
    "statements": {}
  },
  "dependencies": [
    "Component",
    "OpenZeppelin/openzeppelin-contracts@4.7.3/Context",
    "IAccess",
    "IBundleToken",
    "IComponent",
    "IComponentEvents",
    "IComponentOwnerService",
    "OpenZeppelin/openzeppelin-contracts@4.7.3/IERC165",
    "OpenZeppelin/openzeppelin-contracts@4.7.3/IERC20",
    "OpenZeppelin/openzeppelin-contracts@4.7.3/IERC721",
    "IInstanceOperatorService",
    "IInstanceService",
    "IOracle",
    "IOracleService",
    "IProductService",
    "IRegistry",
    "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": [
    182,
    1172
  ],
  "opcodes": "",
  "pcMap": {},
  "sha1": "00244d47f3ed6cdafa2303f2d58e7f87413a254f",
  "source": "// SPDX-License-Identifier: Apache-2.0\npragma solidity 0.8.2;\n\nimport \"./IOracle.sol\";\nimport \"./Component.sol\";\nimport \"./IComponent.sol\";\nimport \"../services/IOracleService.sol\";\n\nabstract contract Oracle is\n    IOracle, \n    Component \n{   \n    IOracleService private _oracleService;\n\n    modifier onlyQuery {\n        require(\n             _msgSender() == _getContractAddress(\"Query\"),\n            \"ERROR:ORA-001:ACCESS_DENIED\"\n        );\n        _;\n    }\n\n    constructor(\n        bytes32 name,\n        address registry\n    )\n        Component(name, ComponentType.Oracle, registry)\n    {\n        _oracleService = IOracleService(_getContractAddress(\"OracleService\"));\n        emit LogOracleCreated(address(this));\n    }\n\n    // default callback function implementations\n    function _afterApprove() internal override { \n        emit LogOracleApproved(getId()); \n    }\n\n    function _afterPropose() internal override { emit LogOracleProposed(getId()); }\n    function _afterDecline() internal override { emit LogOracleDeclined(getId()); }\n\n    function _respond(uint256 requestId, bytes memory data) internal {\n        _oracleService.respond(requestId, data);\n    }    \n}\n",
  "sourceMap": "",
  "sourcePath": "contracts/components/Oracle.sol",
  "type": "contract"
}