{
  "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": "LogProductApproved",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "productAddress",
          "type": "address"
        }
      ],
      "name": "LogProductCreated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "componentId",
          "type": "uint256"
        }
      ],
      "name": "LogProductDeclined",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "componentId",
          "type": "uint256"
        }
      ],
      "name": "LogProductProposed",
      "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": "getApplicationDataStructure",
      "outputs": [
        {
          "internalType": "string",
          "name": "dataStructure",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getClaimDataStructure",
      "outputs": [
        {
          "internalType": "string",
          "name": "dataStructure",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "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": "getPayoutDataStructure",
      "outputs": [
        {
          "internalType": "string",
          "name": "dataStructure",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getPolicyFlow",
      "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": "getRiskpoolId",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getState",
      "outputs": [
        {
          "internalType": "enum IComponent.ComponentState",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getToken",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "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": "capacity",
          "type": "uint256"
        }
      ],
      "name": "riskPoolCapacityCallback",
      "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",
    "29": "/home/vscode/.brownie/packages/etherisc/gif-interface@3b0002a/contracts/components/IProduct.sol",
    "31": "/home/vscode/.brownie/packages/etherisc/gif-interface@3b0002a/contracts/components/Product.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/Product.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
      ],
      "IProduct": [
        21878
      ],
      "IProductService": [
        22121
      ],
      "IRegistry": [
        21976
      ],
      "IRiskpoolService": [
        15040
      ],
      "ITreasury": [
        12909
      ],
      "Ownable": [
        9476
      ],
      "Product": [
        12303
      ]
    },
    "id": 12304,
    "license": "Apache-2.0",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 11677,
        "literals": [
          "solidity",
          "0.8",
          ".2"
        ],
        "nodeType": "PragmaDirective",
        "src": "39:22:31"
      },
      {
        "absolutePath": "/home/vscode/.brownie/packages/etherisc/gif-interface@3b0002a/contracts/components/IProduct.sol",
        "file": "./IProduct.sol",
        "id": 11678,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 12304,
        "sourceUnit": 21879,
        "src": "63:24:31",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/vscode/.brownie/packages/etherisc/gif-interface@3b0002a/contracts/components/Component.sol",
        "file": "./Component.sol",
        "id": 11679,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 12304,
        "sourceUnit": 14353,
        "src": "88:25:31",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/vscode/.brownie/packages/etherisc/gif-interface@3b0002a/contracts/modules/IPolicy.sol",
        "file": "../modules/IPolicy.sol",
        "id": 11680,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 12304,
        "sourceUnit": 12650,
        "src": "114:32:31",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/vscode/.brownie/packages/etherisc/gif-interface@3b0002a/contracts/services/IInstanceService.sol",
        "file": "../services/IInstanceService.sol",
        "id": 11681,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 12304,
        "sourceUnit": 14935,
        "src": "147:42:31",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/vscode/.brownie/packages/etherisc/gif-interface@3b0002a/contracts/services/IProductService.sol",
        "file": "../services/IProductService.sol",
        "id": 11682,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 12304,
        "sourceUnit": 22122,
        "src": "190:41:31",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": true,
        "baseContracts": [
          {
            "baseName": {
              "id": 11683,
              "name": "IProduct",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 21878,
              "src": "266:8:31"
            },
            "id": 11684,
            "nodeType": "InheritanceSpecifier",
            "src": "266:8:31"
          },
          {
            "baseName": {
              "id": 11685,
              "name": "Component",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 14352,
              "src": "281:9:31"
            },
            "id": 11686,
            "nodeType": "InheritanceSpecifier",
            "src": "281:9:31"
          }
        ],
        "contractDependencies": [
          9476,
          11675,
          14352,
          15648,
          21878,
          22980
        ],
        "contractKind": "contract",
        "fullyImplemented": true,
        "id": 12303,
        "linearizedBaseContracts": [
          12303,
          14352,
          9476,
          15648,
          22980,
          21878,
          11675
        ],
        "name": "Product",
        "nameLocation": "251:7:31",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": false,
            "id": 11688,
            "mutability": "mutable",
            "name": "_policyFlow",
            "nameLocation": "318:11:31",
            "nodeType": "VariableDeclaration",
            "scope": 12303,
            "src": "302:27:31",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 11687,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "302:7:31",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 11690,
            "mutability": "mutable",
            "name": "_token",
            "nameLocation": "398:6:31",
            "nodeType": "VariableDeclaration",
            "scope": 12303,
            "src": "382:22:31",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 11689,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "382:7:31",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 11692,
            "mutability": "mutable",
            "name": "_riskpoolId",
            "nameLocation": "465:11:31",
            "nodeType": "VariableDeclaration",
            "scope": 12303,
            "src": "449:27:31",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 11691,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "449:7:31",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 11695,
            "mutability": "mutable",
            "name": "_productService",
            "nameLocation": "555:15:31",
            "nodeType": "VariableDeclaration",
            "scope": 12303,
            "src": "530:40:31",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_IProductService_$22121",
              "typeString": "contract IProductService"
            },
            "typeName": {
              "id": 11694,
              "nodeType": "UserDefinedTypeName",
              "pathNode": {
                "id": 11693,
                "name": "IProductService",
                "nodeType": "IdentifierPath",
                "referencedDeclaration": 22121,
                "src": "530:15:31"
              },
              "referencedDeclaration": 22121,
              "src": "530:15:31",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IProductService_$22121",
                "typeString": "contract IProductService"
              }
            },
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 11698,
            "mutability": "mutable",
            "name": "_instanceService",
            "nameLocation": "602:16:31",
            "nodeType": "VariableDeclaration",
            "scope": 12303,
            "src": "576:42:31",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_IInstanceService_$14934",
              "typeString": "contract IInstanceService"
            },
            "typeName": {
              "id": 11697,
              "nodeType": "UserDefinedTypeName",
              "pathNode": {
                "id": 11696,
                "name": "IInstanceService",
                "nodeType": "IdentifierPath",
                "referencedDeclaration": 14934,
                "src": "576:16:31"
              },
              "referencedDeclaration": 14934,
              "src": "576:16:31",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IInstanceService_$14934",
                "typeString": "contract IInstanceService"
              }
            },
            "visibility": "internal"
          },
          {
            "body": {
              "id": 11719,
              "nodeType": "Block",
              "src": "669:219:31",
              "statements": [
                {
                  "assignments": [
                    11703
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 11703,
                      "mutability": "mutable",
                      "name": "policyHolder",
                      "nameLocation": "687:12:31",
                      "nodeType": "VariableDeclaration",
                      "scope": 11719,
                      "src": "679:20:31",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 11702,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "679:7:31",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 11709,
                  "initialValue": {
                    "expression": {
                      "arguments": [
                        {
                          "id": 11706,
                          "name": "policyId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11700,
                          "src": "731:8:31",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        ],
                        "expression": {
                          "id": 11704,
                          "name": "_instanceService",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11698,
                          "src": "702:16:31",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IInstanceService_$14934",
                            "typeString": "contract IInstanceService"
                          }
                        },
                        "id": 11705,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "getMetadata",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 14853,
                        "src": "702:28:31",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_view$_t_bytes32_$returns$_t_struct$_Metadata_$12464_memory_ptr_$",
                          "typeString": "function (bytes32) view external returns (struct IPolicy.Metadata memory)"
                        }
                      },
                      "id": 11707,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "702:38:31",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Metadata_$12464_memory_ptr",
                        "typeString": "struct IPolicy.Metadata memory"
                      }
                    },
                    "id": 11708,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "owner",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 12452,
                    "src": "702:44:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "679:67:31"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 11714,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 11711,
                            "name": "_msgSender",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 15638,
                            "src": "777:10:31",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                              "typeString": "function () view returns (address)"
                            }
                          },
                          "id": 11712,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "777:12:31",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "id": 11713,
                          "name": "policyHolder",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11703,
                          "src": "793:12:31",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "777:28:31",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4552524f523a5052442d3030313a504f4c4943595f4f525f484f4c4445525f494e56414c4944",
                        "id": 11715,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "820:40:31",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_8c751e03794b568011bdacc7506cfc24e9e6da1a04bd63102218013a02fcc8b2",
                          "typeString": "literal_string \"ERROR:PRD-001:POLICY_OR_HOLDER_INVALID\""
                        },
                        "value": "ERROR:PRD-001:POLICY_OR_HOLDER_INVALID"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_8c751e03794b568011bdacc7506cfc24e9e6da1a04bd63102218013a02fcc8b2",
                          "typeString": "literal_string \"ERROR:PRD-001:POLICY_OR_HOLDER_INVALID\""
                        }
                      ],
                      "id": 11710,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "756:7:31",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 11716,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "756:114:31",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 11717,
                  "nodeType": "ExpressionStatement",
                  "src": "756:114:31"
                },
                {
                  "id": 11718,
                  "nodeType": "PlaceholderStatement",
                  "src": "880:1:31"
                }
              ]
            },
            "id": 11720,
            "name": "onlyPolicyHolder",
            "nameLocation": "634:16:31",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 11701,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11700,
                  "mutability": "mutable",
                  "name": "policyId",
                  "nameLocation": "659:8:31",
                  "nodeType": "VariableDeclaration",
                  "scope": 11720,
                  "src": "651:16:31",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 11699,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "651:7:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "650:18:31"
            },
            "src": "625:263:31",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 11733,
              "nodeType": "Block",
              "src": "915:149:31",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 11728,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 11723,
                            "name": "_msgSender",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 15638,
                            "src": "947:10:31",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                              "typeString": "function () view returns (address)"
                            }
                          },
                          "id": 11724,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "947:12:31",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "4c6963656e6365",
                              "id": 11726,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "983:9:31",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_6ca2c06beb422d975cd2070710bcde13ae6539489c77a2eac3d019f18f8a11bd",
                                "typeString": "literal_string \"Licence\""
                              },
                              "value": "Licence"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_stringliteral_6ca2c06beb422d975cd2070710bcde13ae6539489c77a2eac3d019f18f8a11bd",
                                "typeString": "literal_string \"Licence\""
                              }
                            ],
                            "id": 11725,
                            "name": "_getContractAddress",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14351,
                            "src": "963:19:31",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_address_$",
                              "typeString": "function (bytes32) view returns (address)"
                            }
                          },
                          "id": 11727,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "963:30:31",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "947:46:31",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4552524f523a5052442d3030323a4143434553535f44454e494544",
                        "id": 11729,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1007:29:31",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_c303e58a1c0410c1101cc429b23d15274514a5237e202175e3c0976550224f8a",
                          "typeString": "literal_string \"ERROR:PRD-002:ACCESS_DENIED\""
                        },
                        "value": "ERROR:PRD-002:ACCESS_DENIED"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_c303e58a1c0410c1101cc429b23d15274514a5237e202175e3c0976550224f8a",
                          "typeString": "literal_string \"ERROR:PRD-002:ACCESS_DENIED\""
                        }
                      ],
                      "id": 11722,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "925:7:31",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 11730,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "925:121:31",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 11731,
                  "nodeType": "ExpressionStatement",
                  "src": "925:121:31"
                },
                {
                  "id": 11732,
                  "nodeType": "PlaceholderStatement",
                  "src": "1056:1:31"
                }
              ]
            },
            "id": 11734,
            "name": "onlyLicence",
            "nameLocation": "903:11:31",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 11721,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "915:0:31"
            },
            "src": "894:170:31",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 11747,
              "nodeType": "Block",
              "src": "1090:147:31",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 11742,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 11737,
                            "name": "_msgSender",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 15638,
                            "src": "1122:10:31",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                              "typeString": "function () view returns (address)"
                            }
                          },
                          "id": 11738,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1122:12:31",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "5175657279",
                              "id": 11740,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1158:7:31",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_de27146501ae3a78760bc5f3cf670e34e42f94d4009fee9f620352506ade7ceb",
                                "typeString": "literal_string \"Query\""
                              },
                              "value": "Query"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_stringliteral_de27146501ae3a78760bc5f3cf670e34e42f94d4009fee9f620352506ade7ceb",
                                "typeString": "literal_string \"Query\""
                              }
                            ],
                            "id": 11739,
                            "name": "_getContractAddress",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14351,
                            "src": "1138:19:31",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_address_$",
                              "typeString": "function (bytes32) view returns (address)"
                            }
                          },
                          "id": 11741,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1138:28:31",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "1122:44:31",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4552524f523a5052442d3030333a4143434553535f44454e494544",
                        "id": 11743,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1180:29:31",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_2d47153b44a132de51be507c0cde899d6ab2b1668d3efae9650b7c79b6fd010f",
                          "typeString": "literal_string \"ERROR:PRD-003:ACCESS_DENIED\""
                        },
                        "value": "ERROR:PRD-003:ACCESS_DENIED"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_2d47153b44a132de51be507c0cde899d6ab2b1668d3efae9650b7c79b6fd010f",
                          "typeString": "literal_string \"ERROR:PRD-003:ACCESS_DENIED\""
                        }
                      ],
                      "id": 11736,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "1100:7:31",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 11744,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1100:119:31",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 11745,
                  "nodeType": "ExpressionStatement",
                  "src": "1100:119:31"
                },
                {
                  "id": 11746,
                  "nodeType": "PlaceholderStatement",
                  "src": "1229:1:31"
                }
              ]
            },
            "id": 11748,
            "name": "onlyOracle",
            "nameLocation": "1079:10:31",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 11735,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1090:0:31"
            },
            "src": "1070:167:31",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 11804,
              "nodeType": "Block",
              "src": "1449:383:31",
              "statements": [
                {
                  "expression": {
                    "id": 11769,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 11767,
                      "name": "_token",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11690,
                      "src": "1459:6:31",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 11768,
                      "name": "token",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11752,
                      "src": "1468:5:31",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "1459:14:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 11770,
                  "nodeType": "ExpressionStatement",
                  "src": "1459:14:31"
                },
                {
                  "expression": {
                    "id": 11773,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 11771,
                      "name": "_riskpoolId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11692,
                      "src": "1483:11:31",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 11772,
                      "name": "riskpoolId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11756,
                      "src": "1497:10:31",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "1483:24:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 11774,
                  "nodeType": "ExpressionStatement",
                  "src": "1483:24:31"
                },
                {
                  "expression": {
                    "id": 11779,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 11775,
                      "name": "_policyFlow",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11688,
                      "src": "1565:11:31",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 11777,
                          "name": "policyFlow",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11754,
                          "src": "1599:10:31",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        ],
                        "id": 11776,
                        "name": "_getContractAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14351,
                        "src": "1579:19:31",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_address_$",
                          "typeString": "function (bytes32) view returns (address)"
                        }
                      },
                      "id": 11778,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1579:31:31",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "1565:45:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 11780,
                  "nodeType": "ExpressionStatement",
                  "src": "1565:45:31"
                },
                {
                  "expression": {
                    "id": 11787,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 11781,
                      "name": "_productService",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11695,
                      "src": "1620:15:31",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IProductService_$22121",
                        "typeString": "contract IProductService"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "arguments": [
                            {
                              "hexValue": "50726f6475637453657276696365",
                              "id": 11784,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1674:16:31",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_a0656cfcc1bc970b947aca201a5cc1b43cf3c3649a4b2d6f82968797074fe0b8",
                                "typeString": "literal_string \"ProductService\""
                              },
                              "value": "ProductService"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_stringliteral_a0656cfcc1bc970b947aca201a5cc1b43cf3c3649a4b2d6f82968797074fe0b8",
                                "typeString": "literal_string \"ProductService\""
                              }
                            ],
                            "id": 11783,
                            "name": "_getContractAddress",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14351,
                            "src": "1654:19:31",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_address_$",
                              "typeString": "function (bytes32) view returns (address)"
                            }
                          },
                          "id": 11785,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1654:37:31",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 11782,
                        "name": "IProductService",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 22121,
                        "src": "1638:15:31",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_IProductService_$22121_$",
                          "typeString": "type(contract IProductService)"
                        }
                      },
                      "id": 11786,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1638:54:31",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IProductService_$22121",
                        "typeString": "contract IProductService"
                      }
                    },
                    "src": "1620:72:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IProductService_$22121",
                      "typeString": "contract IProductService"
                    }
                  },
                  "id": 11788,
                  "nodeType": "ExpressionStatement",
                  "src": "1620:72:31"
                },
                {
                  "expression": {
                    "id": 11795,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 11789,
                      "name": "_instanceService",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11698,
                      "src": "1702:16:31",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IInstanceService_$14934",
                        "typeString": "contract IInstanceService"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "arguments": [
                            {
                              "hexValue": "496e7374616e636553657276696365",
                              "id": 11792,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1758:17:31",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_9d0370d7b33c0a7e946fd67f2013156c598b4d6a70b1490bc73aacf4dc1a6f52",
                                "typeString": "literal_string \"InstanceService\""
                              },
                              "value": "InstanceService"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_stringliteral_9d0370d7b33c0a7e946fd67f2013156c598b4d6a70b1490bc73aacf4dc1a6f52",
                                "typeString": "literal_string \"InstanceService\""
                              }
                            ],
                            "id": 11791,
                            "name": "_getContractAddress",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14351,
                            "src": "1738:19:31",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_address_$",
                              "typeString": "function (bytes32) view returns (address)"
                            }
                          },
                          "id": 11793,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1738:38:31",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 11790,
                        "name": "IInstanceService",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14934,
                        "src": "1721:16:31",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_IInstanceService_$14934_$",
                          "typeString": "type(contract IInstanceService)"
                        }
                      },
                      "id": 11794,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1721:56:31",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IInstanceService_$14934",
                        "typeString": "contract IInstanceService"
                      }
                    },
                    "src": "1702:75:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IInstanceService_$14934",
                      "typeString": "contract IInstanceService"
                    }
                  },
                  "id": 11796,
                  "nodeType": "ExpressionStatement",
                  "src": "1702:75:31"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 11800,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -28,
                            "src": "1819:4:31",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Product_$12303",
                              "typeString": "contract Product"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_Product_$12303",
                              "typeString": "contract Product"
                            }
                          ],
                          "id": 11799,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "1811:7:31",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 11798,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "1811:7:31",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 11801,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1811:13:31",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 11797,
                      "name": "LogProductCreated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21830,
                      "src": "1793:17:31",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 11802,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1793:32:31",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 11803,
                  "nodeType": "EmitStatement",
                  "src": "1788:37:31"
                }
              ]
            },
            "id": 11805,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [
              {
                "arguments": [
                  {
                    "id": 11761,
                    "name": "name",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 11750,
                    "src": "1406:4:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  {
                    "expression": {
                      "id": 11762,
                      "name": "ComponentType",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11578,
                      "src": "1412:13:31",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_enum$_ComponentType_$11578_$",
                        "typeString": "type(enum IComponent.ComponentType)"
                      }
                    },
                    "id": 11763,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "memberName": "Product",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 11576,
                    "src": "1412:21:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_ComponentType_$11578",
                      "typeString": "enum IComponent.ComponentType"
                    }
                  },
                  {
                    "id": 11764,
                    "name": "registry",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 11758,
                    "src": "1435:8:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 11765,
                "modifierName": {
                  "id": 11760,
                  "name": "Component",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 14352,
                  "src": "1396:9:31"
                },
                "nodeType": "ModifierInvocation",
                "src": "1396:48:31"
              }
            ],
            "name": "",
            "nameLocation": "-1:-1:-1",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 11759,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11750,
                  "mutability": "mutable",
                  "name": "name",
                  "nameLocation": "1272:4:31",
                  "nodeType": "VariableDeclaration",
                  "scope": 11805,
                  "src": "1264:12:31",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 11749,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1264:7:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 11752,
                  "mutability": "mutable",
                  "name": "token",
                  "nameLocation": "1294:5:31",
                  "nodeType": "VariableDeclaration",
                  "scope": 11805,
                  "src": "1286:13:31",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 11751,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1286:7:31",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 11754,
                  "mutability": "mutable",
                  "name": "policyFlow",
                  "nameLocation": "1317:10:31",
                  "nodeType": "VariableDeclaration",
                  "scope": 11805,
                  "src": "1309:18:31",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 11753,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1309:7:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 11756,
                  "mutability": "mutable",
                  "name": "riskpoolId",
                  "nameLocation": "1345:10:31",
                  "nodeType": "VariableDeclaration",
                  "scope": 11805,
                  "src": "1337:18:31",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 11755,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1337:7:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 11758,
                  "mutability": "mutable",
                  "name": "registry",
                  "nameLocation": "1373:8:31",
                  "nodeType": "VariableDeclaration",
                  "scope": 11805,
                  "src": "1365:16:31",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 11757,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1365:7:31",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1254:133:31"
            },
            "returnParameters": {
              "id": 11766,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1449:0:31"
            },
            "scope": 12303,
            "src": "1243:589:31",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "baseFunctions": [
              21847
            ],
            "body": {
              "id": 11813,
              "nodeType": "Block",
              "src": "1896:30:31",
              "statements": [
                {
                  "expression": {
                    "id": 11811,
                    "name": "_token",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 11690,
                    "src": "1913:6:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 11810,
                  "id": 11812,
                  "nodeType": "Return",
                  "src": "1906:13:31"
                }
              ]
            },
            "functionSelector": "21df0da7",
            "id": 11814,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getToken",
            "nameLocation": "1847:8:31",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 11807,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "1865:8:31"
            },
            "parameters": {
              "id": 11806,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1855:2:31"
            },
            "returnParameters": {
              "id": 11810,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11809,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 11814,
                  "src": "1887:7:31",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 11808,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1887:7:31",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1886:9:31"
            },
            "scope": 12303,
            "src": "1838:88:31",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              21852
            ],
            "body": {
              "id": 11822,
              "nodeType": "Block",
              "src": "1995:35:31",
              "statements": [
                {
                  "expression": {
                    "id": 11820,
                    "name": "_policyFlow",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 11688,
                    "src": "2012:11:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 11819,
                  "id": 11821,
                  "nodeType": "Return",
                  "src": "2005:18:31"
                }
              ]
            },
            "functionSelector": "637d08f4",
            "id": 11823,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getPolicyFlow",
            "nameLocation": "1941:13:31",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 11816,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "1969:8:31"
            },
            "parameters": {
              "id": 11815,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1954:2:31"
            },
            "returnParameters": {
              "id": 11819,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11818,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 11823,
                  "src": "1986:7:31",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 11817,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1986:7:31",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1985:9:31"
            },
            "scope": 12303,
            "src": "1932:98:31",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              21857
            ],
            "body": {
              "id": 11831,
              "nodeType": "Block",
              "src": "2099:35:31",
              "statements": [
                {
                  "expression": {
                    "id": 11829,
                    "name": "_riskpoolId",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 11692,
                    "src": "2116:11:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 11828,
                  "id": 11830,
                  "nodeType": "Return",
                  "src": "2109:18:31"
                }
              ]
            },
            "functionSelector": "70d2fe53",
            "id": 11832,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getRiskpoolId",
            "nameLocation": "2045:13:31",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 11825,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "2068:8:31"
            },
            "parameters": {
              "id": 11824,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2058:2:31"
            },
            "returnParameters": {
              "id": 11828,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11827,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 11832,
                  "src": "2090:7:31",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 11826,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2090:7:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2089:9:31"
            },
            "scope": 12303,
            "src": "2036:98:31",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              14275
            ],
            "body": {
              "id": 11841,
              "nodeType": "Block",
              "src": "2232:37:31",
              "statements": [
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 11837,
                          "name": "getId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14105,
                          "src": "2258:5:31",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                            "typeString": "function () view returns (uint256)"
                          }
                        },
                        "id": 11838,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2258:7:31",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 11836,
                      "name": "LogProductApproved",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21838,
                      "src": "2239:18:31",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$returns$__$",
                        "typeString": "function (uint256)"
                      }
                    },
                    "id": 11839,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2239:27:31",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 11840,
                  "nodeType": "EmitStatement",
                  "src": "2234:32:31"
                }
              ]
            },
            "id": 11842,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_afterApprove",
            "nameLocation": "2198:13:31",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 11834,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "2223:8:31"
            },
            "parameters": {
              "id": 11833,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2211:2:31"
            },
            "returnParameters": {
              "id": 11835,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2232:0:31"
            },
            "scope": 12303,
            "src": "2189:80:31",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "baseFunctions": [
              14271
            ],
            "body": {
              "id": 11851,
              "nodeType": "Block",
              "src": "2318:37:31",
              "statements": [
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 11847,
                          "name": "getId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14105,
                          "src": "2344:5:31",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                            "typeString": "function () view returns (uint256)"
                          }
                        },
                        "id": 11848,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2344:7:31",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 11846,
                      "name": "LogProductProposed",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21834,
                      "src": "2325:18:31",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$returns$__$",
                        "typeString": "function (uint256)"
                      }
                    },
                    "id": 11849,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2325:27:31",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 11850,
                  "nodeType": "EmitStatement",
                  "src": "2320:32:31"
                }
              ]
            },
            "id": 11852,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_afterPropose",
            "nameLocation": "2284:13:31",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 11844,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "2309:8:31"
            },
            "parameters": {
              "id": 11843,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2297:2:31"
            },
            "returnParameters": {
              "id": 11845,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2318:0:31"
            },
            "scope": 12303,
            "src": "2275:80:31",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "baseFunctions": [
              14279
            ],
            "body": {
              "id": 11861,
              "nodeType": "Block",
              "src": "2403:37:31",
              "statements": [
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 11857,
                          "name": "getId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14105,
                          "src": "2429:5:31",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                            "typeString": "function () view returns (uint256)"
                          }
                        },
                        "id": 11858,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2429:7:31",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 11856,
                      "name": "LogProductDeclined",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21842,
                      "src": "2410:18:31",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$returns$__$",
                        "typeString": "function (uint256)"
                      }
                    },
                    "id": 11859,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2410:27:31",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 11860,
                  "nodeType": "EmitStatement",
                  "src": "2405:32:31"
                }
              ]
            },
            "id": 11862,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_afterDecline",
            "nameLocation": "2369:13:31",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 11854,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "2394:8:31"
            },
            "parameters": {
              "id": 11853,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2382:2:31"
            },
            "returnParameters": {
              "id": 11855,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2403:0:31"
            },
            "scope": 12303,
            "src": "2360:80:31",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 11888,
              "nodeType": "Block",
              "src": "2703:202:31",
              "statements": [
                {
                  "expression": {
                    "id": 11886,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 11877,
                      "name": "processId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11875,
                      "src": "2713:9:31",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 11880,
                          "name": "applicationOwner",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11864,
                          "src": "2769:16:31",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "id": 11881,
                          "name": "premiumAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11866,
                          "src": "2800:13:31",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "id": 11882,
                          "name": "sumInsuredAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11868,
                          "src": "2828:16:31",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "id": 11883,
                          "name": "metaData",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11870,
                          "src": "2859:8:31",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        {
                          "id": 11884,
                          "name": "applicationData",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11872,
                          "src": "2882:15:31",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          },
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        ],
                        "expression": {
                          "id": 11878,
                          "name": "_productService",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11695,
                          "src": "2725:15:31",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IProductService_$22121",
                            "typeString": "contract IProductService"
                          }
                        },
                        "id": 11879,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "newApplication",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 21993,
                        "src": "2725:30:31",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$_t_uint256_$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                          "typeString": "function (address,uint256,uint256,bytes memory,bytes memory) external returns (bytes32)"
                        }
                      },
                      "id": 11885,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2725:173:31",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "2713:185:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 11887,
                  "nodeType": "ExpressionStatement",
                  "src": "2713:185:31"
                }
              ]
            },
            "id": 11889,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_newApplication",
            "nameLocation": "2455:15:31",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 11873,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11864,
                  "mutability": "mutable",
                  "name": "applicationOwner",
                  "nameLocation": "2488:16:31",
                  "nodeType": "VariableDeclaration",
                  "scope": 11889,
                  "src": "2480:24:31",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 11863,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2480:7:31",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 11866,
                  "mutability": "mutable",
                  "name": "premiumAmount",
                  "nameLocation": "2522:13:31",
                  "nodeType": "VariableDeclaration",
                  "scope": 11889,
                  "src": "2514:21:31",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 11865,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2514:7:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 11868,
                  "mutability": "mutable",
                  "name": "sumInsuredAmount",
                  "nameLocation": "2553:16:31",
                  "nodeType": "VariableDeclaration",
                  "scope": 11889,
                  "src": "2545:24:31",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 11867,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2545:7:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 11870,
                  "mutability": "mutable",
                  "name": "metaData",
                  "nameLocation": "2592:8:31",
                  "nodeType": "VariableDeclaration",
                  "scope": 11889,
                  "src": "2579:21:31",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 11869,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "2579:5:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 11872,
                  "mutability": "mutable",
                  "name": "applicationData",
                  "nameLocation": "2624:15:31",
                  "nodeType": "VariableDeclaration",
                  "scope": 11889,
                  "src": "2611:28:31",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 11871,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "2611:5:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2470:176:31"
            },
            "returnParameters": {
              "id": 11876,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11875,
                  "mutability": "mutable",
                  "name": "processId",
                  "nameLocation": "2688:9:31",
                  "nodeType": "VariableDeclaration",
                  "scope": 11889,
                  "src": "2680:17:31",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 11874,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2680:7:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2679:19:31"
            },
            "scope": 12303,
            "src": "2446:459:31",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 11930,
              "nodeType": "Block",
              "src": "3091:358:31",
              "statements": [
                {
                  "assignments": [
                    11904
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 11904,
                      "mutability": "mutable",
                      "name": "policy",
                      "nameLocation": "3123:6:31",
                      "nodeType": "VariableDeclaration",
                      "scope": 11930,
                      "src": "3101:28:31",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Policy_$12498_memory_ptr",
                        "typeString": "struct IPolicy.Policy"
                      },
                      "typeName": {
                        "id": 11903,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 11902,
                          "name": "IPolicy.Policy",
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 12498,
                          "src": "3101:14:31"
                        },
                        "referencedDeclaration": 12498,
                        "src": "3101:14:31",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Policy_$12498_storage_ptr",
                          "typeString": "struct IPolicy.Policy"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 11908,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 11906,
                        "name": "processId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11891,
                        "src": "3143:9:31",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 11905,
                      "name": "_getPolicy",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12234,
                      "src": "3132:10:31",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_struct$_Policy_$12498_memory_ptr_$",
                        "typeString": "function (bytes32) view returns (struct IPolicy.Policy memory)"
                      }
                    },
                    "id": 11907,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3132:21:31",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Policy_$12498_memory_ptr",
                      "typeString": "struct IPolicy.Policy memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3101:52:31"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 11913,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 11909,
                        "name": "policy",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11904,
                        "src": "3168:6:31",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Policy_$12498_memory_ptr",
                          "typeString": "struct IPolicy.Policy memory"
                        }
                      },
                      "id": 11910,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "premiumPaidAmount",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 12485,
                      "src": "3168:24:31",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "expression": {
                        "id": 11911,
                        "name": "policy",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11904,
                        "src": "3195:6:31",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Policy_$12498_memory_ptr",
                          "typeString": "struct IPolicy.Policy memory"
                        }
                      },
                      "id": 11912,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "premiumExpectedAmount",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 12483,
                      "src": "3195:28:31",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3168:55:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 11929,
                  "nodeType": "IfStatement",
                  "src": "3164:279:31",
                  "trueBody": {
                    "id": 11928,
                    "nodeType": "Block",
                    "src": "3225:218:31",
                    "statements": [
                      {
                        "expression": {
                          "id": 11926,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "components": [
                              {
                                "id": 11914,
                                "name": "success",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 11894,
                                "src": "3240:7:31",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              {
                                "id": 11915,
                                "name": "feeAmount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 11896,
                                "src": "3249:9:31",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "id": 11916,
                                "name": "netAmount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 11898,
                                "src": "3260:9:31",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "id": 11917,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "TupleExpression",
                            "src": "3239:31:31",
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$_t_bool_$_t_uint256_$_t_uint256_$",
                              "typeString": "tuple(bool,uint256,uint256)"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 11919,
                                "name": "processId",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 11891,
                                "src": "3327:9:31",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 11924,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "expression": {
                                    "id": 11920,
                                    "name": "policy",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 11904,
                                    "src": "3359:6:31",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Policy_$12498_memory_ptr",
                                      "typeString": "struct IPolicy.Policy memory"
                                    }
                                  },
                                  "id": 11921,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "premiumExpectedAmount",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 12483,
                                  "src": "3359:28:31",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "-",
                                "rightExpression": {
                                  "expression": {
                                    "id": 11922,
                                    "name": "policy",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 11904,
                                    "src": "3390:6:31",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Policy_$12498_memory_ptr",
                                      "typeString": "struct IPolicy.Policy memory"
                                    }
                                  },
                                  "id": 11923,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "premiumPaidAmount",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 12485,
                                  "src": "3390:24:31",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "3359:55:31",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 11918,
                              "name": "_collectPremium",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [
                                11931,
                                11956
                              ],
                              "referencedDeclaration": 11956,
                              "src": "3290:15:31",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_uint256_$returns$_t_bool_$_t_uint256_$_t_uint256_$",
                                "typeString": "function (bytes32,uint256) returns (bool,uint256,uint256)"
                              }
                            },
                            "id": 11925,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3290:142:31",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$_t_bool_$_t_uint256_$_t_uint256_$",
                              "typeString": "tuple(bool,uint256,uint256)"
                            }
                          },
                          "src": "3239:193:31",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 11927,
                        "nodeType": "ExpressionStatement",
                        "src": "3239:193:31"
                      }
                    ]
                  }
                }
              ]
            },
            "id": 11931,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_collectPremium",
            "nameLocation": "2920:15:31",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 11892,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11891,
                  "mutability": "mutable",
                  "name": "processId",
                  "nameLocation": "2944:9:31",
                  "nodeType": "VariableDeclaration",
                  "scope": 11931,
                  "src": "2936:17:31",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 11890,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2936:7:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2935:19:31"
            },
            "returnParameters": {
              "id": 11899,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11894,
                  "mutability": "mutable",
                  "name": "success",
                  "nameLocation": "3007:7:31",
                  "nodeType": "VariableDeclaration",
                  "scope": 11931,
                  "src": "3002:12:31",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 11893,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "3002:4:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 11896,
                  "mutability": "mutable",
                  "name": "feeAmount",
                  "nameLocation": "3036:9:31",
                  "nodeType": "VariableDeclaration",
                  "scope": 11931,
                  "src": "3028:17:31",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 11895,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3028:7:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 11898,
                  "mutability": "mutable",
                  "name": "netAmount",
                  "nameLocation": "3067:9:31",
                  "nodeType": "VariableDeclaration",
                  "scope": 11931,
                  "src": "3059:17:31",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 11897,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3059:7:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2988:98:31"
            },
            "scope": 12303,
            "src": "2911:538:31",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 11955,
              "nodeType": "Block",
              "src": "3672:100:31",
              "statements": [
                {
                  "expression": {
                    "id": 11953,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "components": [
                        {
                          "id": 11944,
                          "name": "success",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11938,
                          "src": "3683:7:31",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        {
                          "id": 11945,
                          "name": "feeAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11940,
                          "src": "3692:9:31",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "id": 11946,
                          "name": "netAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11942,
                          "src": "3703:9:31",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "id": 11947,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "TupleExpression",
                      "src": "3682:31:31",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_bool_$_t_uint256_$_t_uint256_$",
                        "typeString": "tuple(bool,uint256,uint256)"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 11950,
                          "name": "processId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11933,
                          "src": "3747:9:31",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        {
                          "id": 11951,
                          "name": "amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11935,
                          "src": "3758:6:31",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "id": 11948,
                          "name": "_productService",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11695,
                          "src": "3716:15:31",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IProductService_$22121",
                            "typeString": "contract IProductService"
                          }
                        },
                        "id": 11949,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "collectPremium",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 22006,
                        "src": "3716:30:31",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_nonpayable$_t_bytes32_$_t_uint256_$returns$_t_bool_$_t_uint256_$_t_uint256_$",
                          "typeString": "function (bytes32,uint256) external returns (bool,uint256,uint256)"
                        }
                      },
                      "id": 11952,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "3716:49:31",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_bool_$_t_uint256_$_t_uint256_$",
                        "typeString": "tuple(bool,uint256,uint256)"
                      }
                    },
                    "src": "3682:83:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 11954,
                  "nodeType": "ExpressionStatement",
                  "src": "3682:83:31"
                }
              ]
            },
            "id": 11956,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_collectPremium",
            "nameLocation": "3464:15:31",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 11936,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11933,
                  "mutability": "mutable",
                  "name": "processId",
                  "nameLocation": "3497:9:31",
                  "nodeType": "VariableDeclaration",
                  "scope": 11956,
                  "src": "3489:17:31",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 11932,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3489:7:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 11935,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "3524:6:31",
                  "nodeType": "VariableDeclaration",
                  "scope": 11956,
                  "src": "3516:14:31",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 11934,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3516:7:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3479:57:31"
            },
            "returnParameters": {
              "id": 11943,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11938,
                  "mutability": "mutable",
                  "name": "success",
                  "nameLocation": "3588:7:31",
                  "nodeType": "VariableDeclaration",
                  "scope": 11956,
                  "src": "3583:12:31",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 11937,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "3583:4:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 11940,
                  "mutability": "mutable",
                  "name": "feeAmount",
                  "nameLocation": "3617:9:31",
                  "nodeType": "VariableDeclaration",
                  "scope": 11956,
                  "src": "3609:17:31",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 11939,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3609:7:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 11942,
                  "mutability": "mutable",
                  "name": "netAmount",
                  "nameLocation": "3648:9:31",
                  "nodeType": "VariableDeclaration",
                  "scope": 11956,
                  "src": "3640:17:31",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 11941,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3640:7:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3569:98:31"
            },
            "scope": 12303,
            "src": "3455:317:31",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 11973,
              "nodeType": "Block",
              "src": "3927:108:31",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 11968,
                        "name": "processId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11958,
                        "src": "3977:9:31",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 11969,
                        "name": "expectedPremiumAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11960,
                        "src": "3988:21:31",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 11970,
                        "name": "sumInsuredAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11962,
                        "src": "4011:16:31",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 11965,
                        "name": "_productService",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11695,
                        "src": "3937:15:31",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IProductService_$22121",
                          "typeString": "contract IProductService"
                        }
                      },
                      "id": 11967,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "adjustPremiumSumInsured",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22015,
                      "src": "3937:39:31",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_bytes32_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (bytes32,uint256,uint256) external"
                      }
                    },
                    "id": 11971,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3937:91:31",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 11972,
                  "nodeType": "ExpressionStatement",
                  "src": "3937:91:31"
                }
              ]
            },
            "id": 11974,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_adjustPremiumSumInsured",
            "nameLocation": "3787:24:31",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 11963,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11958,
                  "mutability": "mutable",
                  "name": "processId",
                  "nameLocation": "3829:9:31",
                  "nodeType": "VariableDeclaration",
                  "scope": 11974,
                  "src": "3821:17:31",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 11957,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3821:7:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 11960,
                  "mutability": "mutable",
                  "name": "expectedPremiumAmount",
                  "nameLocation": "3856:21:31",
                  "nodeType": "VariableDeclaration",
                  "scope": 11974,
                  "src": "3848:29:31",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 11959,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3848:7:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 11962,
                  "mutability": "mutable",
                  "name": "sumInsuredAmount",
                  "nameLocation": "3895:16:31",
                  "nodeType": "VariableDeclaration",
                  "scope": 11974,
                  "src": "3887:24:31",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 11961,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3887:7:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3811:106:31"
            },
            "returnParameters": {
              "id": 11964,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3927:0:31"
            },
            "scope": 12303,
            "src": "3778:257:31",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 11985,
              "nodeType": "Block",
              "src": "4086:50:31",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 11982,
                        "name": "processId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11976,
                        "src": "4119:9:31",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "expression": {
                        "id": 11979,
                        "name": "_productService",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11695,
                        "src": "4096:15:31",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IProductService_$22121",
                          "typeString": "contract IProductService"
                        }
                      },
                      "id": 11981,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "revoke",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22020,
                      "src": "4096:22:31",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_bytes32_$returns$__$",
                        "typeString": "function (bytes32) external"
                      }
                    },
                    "id": 11983,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4096:33:31",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 11984,
                  "nodeType": "ExpressionStatement",
                  "src": "4096:33:31"
                }
              ]
            },
            "id": 11986,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_revoke",
            "nameLocation": "4050:7:31",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 11977,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11976,
                  "mutability": "mutable",
                  "name": "processId",
                  "nameLocation": "4066:9:31",
                  "nodeType": "VariableDeclaration",
                  "scope": 11986,
                  "src": "4058:17:31",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 11975,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "4058:7:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4057:19:31"
            },
            "returnParameters": {
              "id": 11978,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4086:0:31"
            },
            "scope": 12303,
            "src": "4041:95:31",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 12000,
              "nodeType": "Block",
              "src": "4213:64:31",
              "statements": [
                {
                  "expression": {
                    "id": 11998,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 11993,
                      "name": "success",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11991,
                      "src": "4223:7:31",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 11996,
                          "name": "processId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11988,
                          "src": "4260:9:31",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        ],
                        "expression": {
                          "id": 11994,
                          "name": "_productService",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11695,
                          "src": "4233:15:31",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IProductService_$22121",
                            "typeString": "contract IProductService"
                          }
                        },
                        "id": 11995,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "underwrite",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 22027,
                        "src": "4233:26:31",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_nonpayable$_t_bytes32_$returns$_t_bool_$",
                          "typeString": "function (bytes32) external returns (bool)"
                        }
                      },
                      "id": 11997,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4233:37:31",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "4223:47:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 11999,
                  "nodeType": "ExpressionStatement",
                  "src": "4223:47:31"
                }
              ]
            },
            "id": 12001,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_underwrite",
            "nameLocation": "4151:11:31",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 11989,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11988,
                  "mutability": "mutable",
                  "name": "processId",
                  "nameLocation": "4171:9:31",
                  "nodeType": "VariableDeclaration",
                  "scope": 12001,
                  "src": "4163:17:31",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 11987,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "4163:7:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4162:19:31"
            },
            "returnParameters": {
              "id": 11992,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11991,
                  "mutability": "mutable",
                  "name": "success",
                  "nameLocation": "4204:7:31",
                  "nodeType": "VariableDeclaration",
                  "scope": 12001,
                  "src": "4199:12:31",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 11990,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "4199:4:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4198:14:31"
            },
            "scope": 12303,
            "src": "4142:135:31",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 12012,
              "nodeType": "Block",
              "src": "4329:51:31",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 12009,
                        "name": "processId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12003,
                        "src": "4363:9:31",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "expression": {
                        "id": 12006,
                        "name": "_productService",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11695,
                        "src": "4339:15:31",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IProductService_$22121",
                          "typeString": "contract IProductService"
                        }
                      },
                      "id": 12008,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "decline",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22032,
                      "src": "4339:23:31",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_bytes32_$returns$__$",
                        "typeString": "function (bytes32) external"
                      }
                    },
                    "id": 12010,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4339:34:31",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 12011,
                  "nodeType": "ExpressionStatement",
                  "src": "4339:34:31"
                }
              ]
            },
            "id": 12013,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_decline",
            "nameLocation": "4292:8:31",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 12004,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12003,
                  "mutability": "mutable",
                  "name": "processId",
                  "nameLocation": "4309:9:31",
                  "nodeType": "VariableDeclaration",
                  "scope": 12013,
                  "src": "4301:17:31",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 12002,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "4301:7:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4300:19:31"
            },
            "returnParameters": {
              "id": 12005,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4329:0:31"
            },
            "scope": 12303,
            "src": "4283:97:31",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 12024,
              "nodeType": "Block",
              "src": "4431:50:31",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 12021,
                        "name": "processId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12015,
                        "src": "4464:9:31",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "expression": {
                        "id": 12018,
                        "name": "_productService",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11695,
                        "src": "4441:15:31",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IProductService_$22121",
                          "typeString": "contract IProductService"
                        }
                      },
                      "id": 12020,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "expire",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22037,
                      "src": "4441:22:31",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_bytes32_$returns$__$",
                        "typeString": "function (bytes32) external"
                      }
                    },
                    "id": 12022,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4441:33:31",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 12023,
                  "nodeType": "ExpressionStatement",
                  "src": "4441:33:31"
                }
              ]
            },
            "id": 12025,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_expire",
            "nameLocation": "4395:7:31",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 12016,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12015,
                  "mutability": "mutable",
                  "name": "processId",
                  "nameLocation": "4411:9:31",
                  "nodeType": "VariableDeclaration",
                  "scope": 12025,
                  "src": "4403:17:31",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 12014,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "4403:7:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4402:19:31"
            },
            "returnParameters": {
              "id": 12017,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4431:0:31"
            },
            "scope": 12303,
            "src": "4386:95:31",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 12036,
              "nodeType": "Block",
              "src": "4531:49:31",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 12033,
                        "name": "processId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12027,
                        "src": "4563:9:31",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "expression": {
                        "id": 12030,
                        "name": "_productService",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11695,
                        "src": "4541:15:31",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IProductService_$22121",
                          "typeString": "contract IProductService"
                        }
                      },
                      "id": 12032,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "close",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22042,
                      "src": "4541:21:31",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_bytes32_$returns$__$",
                        "typeString": "function (bytes32) external"
                      }
                    },
                    "id": 12034,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4541:32:31",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 12035,
                  "nodeType": "ExpressionStatement",
                  "src": "4541:32:31"
                }
              ]
            },
            "id": 12037,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_close",
            "nameLocation": "4496:6:31",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 12028,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12027,
                  "mutability": "mutable",
                  "name": "processId",
                  "nameLocation": "4511:9:31",
                  "nodeType": "VariableDeclaration",
                  "scope": 12037,
                  "src": "4503:17:31",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 12026,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "4503:7:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4502:19:31"
            },
            "returnParameters": {
              "id": 12029,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4531:0:31"
            },
            "scope": 12303,
            "src": "4487:93:31",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 12057,
              "nodeType": "Block",
              "src": "4751:120:31",
              "statements": [
                {
                  "expression": {
                    "id": 12055,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 12048,
                      "name": "claimId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12046,
                      "src": "4761:7:31",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 12051,
                          "name": "processId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 12039,
                          "src": "4809:9:31",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        {
                          "id": 12052,
                          "name": "claimAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 12041,
                          "src": "4833:11:31",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "id": 12053,
                          "name": "data",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 12043,
                          "src": "4859:4:31",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        ],
                        "expression": {
                          "id": 12049,
                          "name": "_productService",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11695,
                          "src": "4771:15:31",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IProductService_$22121",
                            "typeString": "contract IProductService"
                          }
                        },
                        "id": 12050,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "newClaim",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 22053,
                        "src": "4771:24:31",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_nonpayable$_t_bytes32_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_uint256_$",
                          "typeString": "function (bytes32,uint256,bytes memory) external returns (uint256)"
                        }
                      },
                      "id": 12054,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4771:93:31",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "4761:103:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 12056,
                  "nodeType": "ExpressionStatement",
                  "src": "4761:103:31"
                }
              ]
            },
            "id": 12058,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_newClaim",
            "nameLocation": "4595:9:31",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 12044,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12039,
                  "mutability": "mutable",
                  "name": "processId",
                  "nameLocation": "4622:9:31",
                  "nodeType": "VariableDeclaration",
                  "scope": 12058,
                  "src": "4614:17:31",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 12038,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "4614:7:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12041,
                  "mutability": "mutable",
                  "name": "claimAmount",
                  "nameLocation": "4650:11:31",
                  "nodeType": "VariableDeclaration",
                  "scope": 12058,
                  "src": "4642:19:31",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 12040,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4642:7:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12043,
                  "mutability": "mutable",
                  "name": "data",
                  "nameLocation": "4684:4:31",
                  "nodeType": "VariableDeclaration",
                  "scope": 12058,
                  "src": "4671:17:31",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 12042,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "4671:5:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4604:90:31"
            },
            "returnParameters": {
              "id": 12047,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12046,
                  "mutability": "mutable",
                  "name": "claimId",
                  "nameLocation": "4738:7:31",
                  "nodeType": "VariableDeclaration",
                  "scope": 12058,
                  "src": "4730:15:31",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 12045,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4730:7:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4729:17:31"
            },
            "scope": 12303,
            "src": "4586:285:31",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 12075,
              "nodeType": "Block",
              "src": "5009:118:31",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 12070,
                        "name": "processId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12060,
                        "src": "5061:9:31",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 12071,
                        "name": "claimId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12062,
                        "src": "5085:7:31",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 12072,
                        "name": "payoutAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12064,
                        "src": "5107:12:31",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 12067,
                        "name": "_productService",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11695,
                        "src": "5019:15:31",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IProductService_$22121",
                          "typeString": "contract IProductService"
                        }
                      },
                      "id": 12069,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "confirmClaim",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22062,
                      "src": "5019:28:31",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_bytes32_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (bytes32,uint256,uint256) external"
                      }
                    },
                    "id": 12073,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5019:101:31",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 12074,
                  "nodeType": "ExpressionStatement",
                  "src": "5019:101:31"
                }
              ]
            },
            "id": 12076,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_confirmClaim",
            "nameLocation": "4886:13:31",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 12065,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12060,
                  "mutability": "mutable",
                  "name": "processId",
                  "nameLocation": "4917:9:31",
                  "nodeType": "VariableDeclaration",
                  "scope": 12076,
                  "src": "4909:17:31",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 12059,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "4909:7:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12062,
                  "mutability": "mutable",
                  "name": "claimId",
                  "nameLocation": "4944:7:31",
                  "nodeType": "VariableDeclaration",
                  "scope": 12076,
                  "src": "4936:15:31",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 12061,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4936:7:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12064,
                  "mutability": "mutable",
                  "name": "payoutAmount",
                  "nameLocation": "4969:12:31",
                  "nodeType": "VariableDeclaration",
                  "scope": 12076,
                  "src": "4961:20:31",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 12063,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4961:7:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4899:88:31"
            },
            "returnParameters": {
              "id": 12066,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5009:0:31"
            },
            "scope": 12303,
            "src": "4877:250:31",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 12090,
              "nodeType": "Block",
              "src": "5201:65:31",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 12086,
                        "name": "processId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12078,
                        "src": "5240:9:31",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 12087,
                        "name": "claimId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12080,
                        "src": "5251:7:31",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 12083,
                        "name": "_productService",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11695,
                        "src": "5211:15:31",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IProductService_$22121",
                          "typeString": "contract IProductService"
                        }
                      },
                      "id": 12085,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "declineClaim",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22069,
                      "src": "5211:28:31",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_bytes32_$_t_uint256_$returns$__$",
                        "typeString": "function (bytes32,uint256) external"
                      }
                    },
                    "id": 12088,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5211:48:31",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 12089,
                  "nodeType": "ExpressionStatement",
                  "src": "5211:48:31"
                }
              ]
            },
            "id": 12091,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_declineClaim",
            "nameLocation": "5142:13:31",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 12081,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12078,
                  "mutability": "mutable",
                  "name": "processId",
                  "nameLocation": "5164:9:31",
                  "nodeType": "VariableDeclaration",
                  "scope": 12091,
                  "src": "5156:17:31",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 12077,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "5156:7:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12080,
                  "mutability": "mutable",
                  "name": "claimId",
                  "nameLocation": "5183:7:31",
                  "nodeType": "VariableDeclaration",
                  "scope": 12091,
                  "src": "5175:15:31",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 12079,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5175:7:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5155:36:31"
            },
            "returnParameters": {
              "id": 12082,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5201:0:31"
            },
            "scope": 12303,
            "src": "5133:133:31",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 12105,
              "nodeType": "Block",
              "src": "5338:63:31",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 12101,
                        "name": "processId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12093,
                        "src": "5375:9:31",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 12102,
                        "name": "claimId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12095,
                        "src": "5386:7:31",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 12098,
                        "name": "_productService",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11695,
                        "src": "5348:15:31",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IProductService_$22121",
                          "typeString": "contract IProductService"
                        }
                      },
                      "id": 12100,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "closeClaim",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22076,
                      "src": "5348:26:31",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_bytes32_$_t_uint256_$returns$__$",
                        "typeString": "function (bytes32,uint256) external"
                      }
                    },
                    "id": 12103,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5348:46:31",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 12104,
                  "nodeType": "ExpressionStatement",
                  "src": "5348:46:31"
                }
              ]
            },
            "id": 12106,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_closeClaim",
            "nameLocation": "5281:11:31",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 12096,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12093,
                  "mutability": "mutable",
                  "name": "processId",
                  "nameLocation": "5301:9:31",
                  "nodeType": "VariableDeclaration",
                  "scope": 12106,
                  "src": "5293:17:31",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 12092,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "5293:7:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12095,
                  "mutability": "mutable",
                  "name": "claimId",
                  "nameLocation": "5320:7:31",
                  "nodeType": "VariableDeclaration",
                  "scope": 12106,
                  "src": "5312:15:31",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 12094,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5312:7:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5292:36:31"
            },
            "returnParameters": {
              "id": 12097,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5338:0:31"
            },
            "scope": 12303,
            "src": "5272:129:31",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 12129,
              "nodeType": "Block",
              "src": "5591:87:31",
              "statements": [
                {
                  "expression": {
                    "id": 12127,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 12119,
                      "name": "payoutId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12117,
                      "src": "5601:8:31",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 12122,
                          "name": "processId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 12108,
                          "src": "5638:9:31",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        {
                          "id": 12123,
                          "name": "claimId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 12110,
                          "src": "5649:7:31",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "id": 12124,
                          "name": "amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 12112,
                          "src": "5658:6:31",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "id": 12125,
                          "name": "data",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 12114,
                          "src": "5666:4:31",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        ],
                        "expression": {
                          "id": 12120,
                          "name": "_productService",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11695,
                          "src": "5612:15:31",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IProductService_$22121",
                            "typeString": "contract IProductService"
                          }
                        },
                        "id": 12121,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "newPayout",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 22089,
                        "src": "5612:25:31",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_nonpayable$_t_bytes32_$_t_uint256_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_uint256_$",
                          "typeString": "function (bytes32,uint256,uint256,bytes memory) external returns (uint256)"
                        }
                      },
                      "id": 12126,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "5612:59:31",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "5601:70:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 12128,
                  "nodeType": "ExpressionStatement",
                  "src": "5601:70:31"
                }
              ]
            },
            "id": 12130,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_newPayout",
            "nameLocation": "5416:10:31",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 12115,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12108,
                  "mutability": "mutable",
                  "name": "processId",
                  "nameLocation": "5444:9:31",
                  "nodeType": "VariableDeclaration",
                  "scope": 12130,
                  "src": "5436:17:31",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 12107,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "5436:7:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12110,
                  "mutability": "mutable",
                  "name": "claimId",
                  "nameLocation": "5471:7:31",
                  "nodeType": "VariableDeclaration",
                  "scope": 12130,
                  "src": "5463:15:31",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 12109,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5463:7:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12112,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "5496:6:31",
                  "nodeType": "VariableDeclaration",
                  "scope": 12130,
                  "src": "5488:14:31",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 12111,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5488:7:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12114,
                  "mutability": "mutable",
                  "name": "data",
                  "nameLocation": "5525:4:31",
                  "nodeType": "VariableDeclaration",
                  "scope": 12130,
                  "src": "5512:17:31",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 12113,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "5512:5:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5426:109:31"
            },
            "returnParameters": {
              "id": 12118,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12117,
                  "mutability": "mutable",
                  "name": "payoutId",
                  "nameLocation": "5577:8:31",
                  "nodeType": "VariableDeclaration",
                  "scope": 12130,
                  "src": "5569:16:31",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 12116,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5569:7:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5568:18:31"
            },
            "scope": 12303,
            "src": "5407:271:31",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 12151,
              "nodeType": "Block",
              "src": "5882:132:31",
              "statements": [
                {
                  "expression": {
                    "id": 12149,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "components": [
                        {
                          "id": 12141,
                          "name": "feeAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 12137,
                          "src": "5906:9:31",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "id": 12142,
                          "name": "netPayoutAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 12139,
                          "src": "5929:15:31",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "id": 12143,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "TupleExpression",
                      "src": "5892:62:31",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                        "typeString": "tuple(uint256,uint256)"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 12146,
                          "name": "processId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 12132,
                          "src": "5987:9:31",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        {
                          "id": 12147,
                          "name": "payoutId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 12134,
                          "src": "5998:8:31",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "id": 12144,
                          "name": "_productService",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11695,
                          "src": "5957:15:31",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IProductService_$22121",
                            "typeString": "contract IProductService"
                          }
                        },
                        "id": 12145,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "processPayout",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 22100,
                        "src": "5957:29:31",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_nonpayable$_t_bytes32_$_t_uint256_$returns$_t_uint256_$_t_uint256_$",
                          "typeString": "function (bytes32,uint256) external returns (uint256,uint256)"
                        }
                      },
                      "id": 12148,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "5957:50:31",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                        "typeString": "tuple(uint256,uint256)"
                      }
                    },
                    "src": "5892:115:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 12150,
                  "nodeType": "ExpressionStatement",
                  "src": "5892:115:31"
                }
              ]
            },
            "id": 12152,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_processPayout",
            "nameLocation": "5693:14:31",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 12135,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12132,
                  "mutability": "mutable",
                  "name": "processId",
                  "nameLocation": "5725:9:31",
                  "nodeType": "VariableDeclaration",
                  "scope": 12152,
                  "src": "5717:17:31",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 12131,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "5717:7:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12134,
                  "mutability": "mutable",
                  "name": "payoutId",
                  "nameLocation": "5752:8:31",
                  "nodeType": "VariableDeclaration",
                  "scope": 12152,
                  "src": "5744:16:31",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 12133,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5744:7:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5707:59:31"
            },
            "returnParameters": {
              "id": 12140,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12137,
                  "mutability": "mutable",
                  "name": "feeAmount",
                  "nameLocation": "5821:9:31",
                  "nodeType": "VariableDeclaration",
                  "scope": 12152,
                  "src": "5813:17:31",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 12136,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5813:7:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12139,
                  "mutability": "mutable",
                  "name": "netPayoutAmount",
                  "nameLocation": "5852:15:31",
                  "nodeType": "VariableDeclaration",
                  "scope": 12152,
                  "src": "5844:23:31",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 12138,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5844:7:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5799:78:31"
            },
            "scope": 12303,
            "src": "5684:330:31",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 12179,
              "nodeType": "Block",
              "src": "6235:196:31",
              "statements": [
                {
                  "expression": {
                    "id": 12177,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 12165,
                      "name": "requestId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12163,
                      "src": "6245:9:31",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 12168,
                          "name": "processId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 12154,
                          "src": "6294:9:31",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        {
                          "id": 12169,
                          "name": "input",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 12156,
                          "src": "6317:5:31",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        {
                          "id": 12170,
                          "name": "callbackMethodName",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 12158,
                          "src": "6336:18:31",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string memory"
                          }
                        },
                        {
                          "arguments": [
                            {
                              "id": 12173,
                              "name": "this",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -28,
                              "src": "6376:4:31",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_Product_$12303",
                                "typeString": "contract Product"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_Product_$12303",
                                "typeString": "contract Product"
                              }
                            ],
                            "id": 12172,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "6368:7:31",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 12171,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "6368:7:31",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 12174,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6368:13:31",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "id": 12175,
                          "name": "responsibleOracleId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 12160,
                          "src": "6395:19:31",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          },
                          {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string memory"
                          },
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "id": 12166,
                          "name": "_productService",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11695,
                          "src": "6257:15:31",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IProductService_$22121",
                            "typeString": "contract IProductService"
                          }
                        },
                        "id": 12167,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "request",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 22115,
                        "src": "6257:23:31",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_nonpayable$_t_bytes32_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$_t_address_$_t_uint256_$returns$_t_uint256_$",
                          "typeString": "function (bytes32,bytes memory,string memory,address,uint256) external returns (uint256)"
                        }
                      },
                      "id": 12176,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "6257:167:31",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "6245:179:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 12178,
                  "nodeType": "ExpressionStatement",
                  "src": "6245:179:31"
                }
              ]
            },
            "id": 12180,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_request",
            "nameLocation": "6029:8:31",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 12161,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12154,
                  "mutability": "mutable",
                  "name": "processId",
                  "nameLocation": "6055:9:31",
                  "nodeType": "VariableDeclaration",
                  "scope": 12180,
                  "src": "6047:17:31",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 12153,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "6047:7:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12156,
                  "mutability": "mutable",
                  "name": "input",
                  "nameLocation": "6087:5:31",
                  "nodeType": "VariableDeclaration",
                  "scope": 12180,
                  "src": "6074:18:31",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 12155,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "6074:5:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12158,
                  "mutability": "mutable",
                  "name": "callbackMethodName",
                  "nameLocation": "6116:18:31",
                  "nodeType": "VariableDeclaration",
                  "scope": 12180,
                  "src": "6102:32:31",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 12157,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "6102:6:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12160,
                  "mutability": "mutable",
                  "name": "responsibleOracleId",
                  "nameLocation": "6152:19:31",
                  "nodeType": "VariableDeclaration",
                  "scope": 12180,
                  "src": "6144:27:31",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 12159,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6144:7:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6037:140:31"
            },
            "returnParameters": {
              "id": 12164,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12163,
                  "mutability": "mutable",
                  "name": "requestId",
                  "nameLocation": "6220:9:31",
                  "nodeType": "VariableDeclaration",
                  "scope": 12180,
                  "src": "6212:17:31",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 12162,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6212:7:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6211:19:31"
            },
            "scope": 12303,
            "src": "6020:411:31",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 12191,
              "nodeType": "Block",
              "src": "6501:57:31",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 12188,
                        "name": "requestId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12182,
                        "src": "6541:9:31",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 12185,
                        "name": "_productService",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11695,
                        "src": "6511:15:31",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IProductService_$22121",
                          "typeString": "contract IProductService"
                        }
                      },
                      "id": 12187,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "cancelRequest",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22120,
                      "src": "6511:29:31",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$returns$__$",
                        "typeString": "function (uint256) external"
                      }
                    },
                    "id": 12189,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6511:40:31",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 12190,
                  "nodeType": "ExpressionStatement",
                  "src": "6511:40:31"
                }
              ]
            },
            "id": 12192,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_cancelRequest",
            "nameLocation": "6446:14:31",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 12183,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12182,
                  "mutability": "mutable",
                  "name": "requestId",
                  "nameLocation": "6469:9:31",
                  "nodeType": "VariableDeclaration",
                  "scope": 12192,
                  "src": "6461:17:31",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 12181,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6461:7:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6460:19:31"
            },
            "returnParameters": {
              "id": 12184,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6501:0:31"
            },
            "scope": 12303,
            "src": "6437:121:31",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 12205,
              "nodeType": "Block",
              "src": "6694:63:31",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 12202,
                        "name": "processId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12194,
                        "src": "6740:9:31",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "expression": {
                        "id": 12200,
                        "name": "_instanceService",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11698,
                        "src": "6711:16:31",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IInstanceService_$14934",
                          "typeString": "contract IInstanceService"
                        }
                      },
                      "id": 12201,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "getMetadata",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 14853,
                      "src": "6711:28:31",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_bytes32_$returns$_t_struct$_Metadata_$12464_memory_ptr_$",
                        "typeString": "function (bytes32) view external returns (struct IPolicy.Metadata memory)"
                      }
                    },
                    "id": 12203,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6711:39:31",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Metadata_$12464_memory_ptr",
                      "typeString": "struct IPolicy.Metadata memory"
                    }
                  },
                  "functionReturnParameters": 12199,
                  "id": 12204,
                  "nodeType": "Return",
                  "src": "6704:46:31"
                }
              ]
            },
            "id": 12206,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_getMetadata",
            "nameLocation": "6573:12:31",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 12195,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12194,
                  "mutability": "mutable",
                  "name": "processId",
                  "nameLocation": "6594:9:31",
                  "nodeType": "VariableDeclaration",
                  "scope": 12206,
                  "src": "6586:17:31",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 12193,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "6586:7:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6585:19:31"
            },
            "returnParameters": {
              "id": 12199,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12198,
                  "mutability": "mutable",
                  "name": "metadata",
                  "nameLocation": "6679:8:31",
                  "nodeType": "VariableDeclaration",
                  "scope": 12206,
                  "src": "6655:32:31",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Metadata_$12464_memory_ptr",
                    "typeString": "struct IPolicy.Metadata"
                  },
                  "typeName": {
                    "id": 12197,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 12196,
                      "name": "IPolicy.Metadata",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 12464,
                      "src": "6655:16:31"
                    },
                    "referencedDeclaration": 12464,
                    "src": "6655:16:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Metadata_$12464_storage_ptr",
                      "typeString": "struct IPolicy.Metadata"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6654:34:31"
            },
            "scope": 12303,
            "src": "6564:193:31",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 12219,
              "nodeType": "Block",
              "src": "6902:66:31",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 12216,
                        "name": "processId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12208,
                        "src": "6951:9:31",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "expression": {
                        "id": 12214,
                        "name": "_instanceService",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11698,
                        "src": "6919:16:31",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IInstanceService_$14934",
                          "typeString": "contract IInstanceService"
                        }
                      },
                      "id": 12215,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "getApplication",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 14861,
                      "src": "6919:31:31",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_bytes32_$returns$_t_struct$_Application_$12478_memory_ptr_$",
                        "typeString": "function (bytes32) view external returns (struct IPolicy.Application memory)"
                      }
                    },
                    "id": 12217,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6919:42:31",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Application_$12478_memory_ptr",
                      "typeString": "struct IPolicy.Application memory"
                    }
                  },
                  "functionReturnParameters": 12213,
                  "id": 12218,
                  "nodeType": "Return",
                  "src": "6912:49:31"
                }
              ]
            },
            "id": 12220,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_getApplication",
            "nameLocation": "6772:15:31",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 12209,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12208,
                  "mutability": "mutable",
                  "name": "processId",
                  "nameLocation": "6796:9:31",
                  "nodeType": "VariableDeclaration",
                  "scope": 12220,
                  "src": "6788:17:31",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 12207,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "6788:7:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6787:19:31"
            },
            "returnParameters": {
              "id": 12213,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12212,
                  "mutability": "mutable",
                  "name": "application",
                  "nameLocation": "6884:11:31",
                  "nodeType": "VariableDeclaration",
                  "scope": 12220,
                  "src": "6857:38:31",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Application_$12478_memory_ptr",
                    "typeString": "struct IPolicy.Application"
                  },
                  "typeName": {
                    "id": 12211,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 12210,
                      "name": "IPolicy.Application",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 12478,
                      "src": "6857:19:31"
                    },
                    "referencedDeclaration": 12478,
                    "src": "6857:19:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Application_$12478_storage_ptr",
                      "typeString": "struct IPolicy.Application"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6856:40:31"
            },
            "scope": 12303,
            "src": "6763:205:31",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 12233,
              "nodeType": "Block",
              "src": "7098:61:31",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 12230,
                        "name": "processId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12222,
                        "src": "7142:9:31",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "expression": {
                        "id": 12228,
                        "name": "_instanceService",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11698,
                        "src": "7115:16:31",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IInstanceService_$14934",
                          "typeString": "contract IInstanceService"
                        }
                      },
                      "id": 12229,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "getPolicy",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 14869,
                      "src": "7115:26:31",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_bytes32_$returns$_t_struct$_Policy_$12498_memory_ptr_$",
                        "typeString": "function (bytes32) view external returns (struct IPolicy.Policy memory)"
                      }
                    },
                    "id": 12231,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7115:37:31",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Policy_$12498_memory_ptr",
                      "typeString": "struct IPolicy.Policy memory"
                    }
                  },
                  "functionReturnParameters": 12227,
                  "id": 12232,
                  "nodeType": "Return",
                  "src": "7108:44:31"
                }
              ]
            },
            "id": 12234,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_getPolicy",
            "nameLocation": "6983:10:31",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 12223,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12222,
                  "mutability": "mutable",
                  "name": "processId",
                  "nameLocation": "7002:9:31",
                  "nodeType": "VariableDeclaration",
                  "scope": 12234,
                  "src": "6994:17:31",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 12221,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "6994:7:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6993:19:31"
            },
            "returnParameters": {
              "id": 12227,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12226,
                  "mutability": "mutable",
                  "name": "policy",
                  "nameLocation": "7085:6:31",
                  "nodeType": "VariableDeclaration",
                  "scope": 12234,
                  "src": "7063:28:31",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Policy_$12498_memory_ptr",
                    "typeString": "struct IPolicy.Policy"
                  },
                  "typeName": {
                    "id": 12225,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 12224,
                      "name": "IPolicy.Policy",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 12498,
                      "src": "7063:14:31"
                    },
                    "referencedDeclaration": 12498,
                    "src": "7063:14:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Policy_$12498_storage_ptr",
                      "typeString": "struct IPolicy.Policy"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7062:30:31"
            },
            "scope": 12303,
            "src": "6974:185:31",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 12250,
              "nodeType": "Block",
              "src": "7303:69:31",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 12246,
                        "name": "processId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12236,
                        "src": "7346:9:31",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 12247,
                        "name": "claimId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12238,
                        "src": "7357:7:31",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 12244,
                        "name": "_instanceService",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11698,
                        "src": "7320:16:31",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IInstanceService_$14934",
                          "typeString": "contract IInstanceService"
                        }
                      },
                      "id": 12245,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "getClaim",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 14893,
                      "src": "7320:25:31",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_bytes32_$_t_uint256_$returns$_t_struct$_Claim_$12512_memory_ptr_$",
                        "typeString": "function (bytes32,uint256) view external returns (struct IPolicy.Claim memory)"
                      }
                    },
                    "id": 12248,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7320:45:31",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Claim_$12512_memory_ptr",
                      "typeString": "struct IPolicy.Claim memory"
                    }
                  },
                  "functionReturnParameters": 12243,
                  "id": 12249,
                  "nodeType": "Return",
                  "src": "7313:52:31"
                }
              ]
            },
            "id": 12251,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_getClaim",
            "nameLocation": "7174:9:31",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 12239,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12236,
                  "mutability": "mutable",
                  "name": "processId",
                  "nameLocation": "7192:9:31",
                  "nodeType": "VariableDeclaration",
                  "scope": 12251,
                  "src": "7184:17:31",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 12235,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "7184:7:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12238,
                  "mutability": "mutable",
                  "name": "claimId",
                  "nameLocation": "7211:7:31",
                  "nodeType": "VariableDeclaration",
                  "scope": 12251,
                  "src": "7203:15:31",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 12237,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7203:7:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7183:36:31"
            },
            "returnParameters": {
              "id": 12243,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12242,
                  "mutability": "mutable",
                  "name": "claim",
                  "nameLocation": "7291:5:31",
                  "nodeType": "VariableDeclaration",
                  "scope": 12251,
                  "src": "7270:26:31",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Claim_$12512_memory_ptr",
                    "typeString": "struct IPolicy.Claim"
                  },
                  "typeName": {
                    "id": 12241,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 12240,
                      "name": "IPolicy.Claim",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 12512,
                      "src": "7270:13:31"
                    },
                    "referencedDeclaration": 12512,
                    "src": "7270:13:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Claim_$12512_storage_ptr",
                      "typeString": "struct IPolicy.Claim"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7269:28:31"
            },
            "scope": 12303,
            "src": "7165:207:31",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 12267,
              "nodeType": "Block",
              "src": "7520:71:31",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 12263,
                        "name": "processId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12253,
                        "src": "7564:9:31",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 12264,
                        "name": "payoutId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12255,
                        "src": "7575:8:31",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 12261,
                        "name": "_instanceService",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11698,
                        "src": "7537:16:31",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IInstanceService_$14934",
                          "typeString": "contract IInstanceService"
                        }
                      },
                      "id": 12262,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "getPayout",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 14903,
                      "src": "7537:26:31",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_bytes32_$_t_uint256_$returns$_t_struct$_Payout_$12526_memory_ptr_$",
                        "typeString": "function (bytes32,uint256) view external returns (struct IPolicy.Payout memory)"
                      }
                    },
                    "id": 12265,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7537:47:31",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Payout_$12526_memory_ptr",
                      "typeString": "struct IPolicy.Payout memory"
                    }
                  },
                  "functionReturnParameters": 12260,
                  "id": 12266,
                  "nodeType": "Return",
                  "src": "7530:54:31"
                }
              ]
            },
            "id": 12268,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_getPayout",
            "nameLocation": "7387:10:31",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 12256,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12253,
                  "mutability": "mutable",
                  "name": "processId",
                  "nameLocation": "7406:9:31",
                  "nodeType": "VariableDeclaration",
                  "scope": 12268,
                  "src": "7398:17:31",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 12252,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "7398:7:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12255,
                  "mutability": "mutable",
                  "name": "payoutId",
                  "nameLocation": "7425:8:31",
                  "nodeType": "VariableDeclaration",
                  "scope": 12268,
                  "src": "7417:16:31",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 12254,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7417:7:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7397:37:31"
            },
            "returnParameters": {
              "id": 12260,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12259,
                  "mutability": "mutable",
                  "name": "payout",
                  "nameLocation": "7507:6:31",
                  "nodeType": "VariableDeclaration",
                  "scope": 12268,
                  "src": "7485:28:31",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Payout_$12526_memory_ptr",
                    "typeString": "struct IPolicy.Payout"
                  },
                  "typeName": {
                    "id": 12258,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 12257,
                      "name": "IPolicy.Payout",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 12526,
                      "src": "7485:14:31"
                    },
                    "referencedDeclaration": 12526,
                    "src": "7485:14:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Payout_$12526_storage_ptr",
                      "typeString": "struct IPolicy.Payout"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7484:30:31"
            },
            "scope": 12303,
            "src": "7378:213:31",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "baseFunctions": [
              21862
            ],
            "body": {
              "id": 12276,
              "nodeType": "Block",
              "src": "7704:26:31",
              "statements": [
                {
                  "expression": {
                    "hexValue": "",
                    "id": 12274,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "7721:2:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                      "typeString": "literal_string \"\""
                    },
                    "value": ""
                  },
                  "functionReturnParameters": 12273,
                  "id": 12275,
                  "nodeType": "Return",
                  "src": "7714:9:31"
                }
              ]
            },
            "functionSelector": "94f64ff4",
            "id": 12277,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getApplicationDataStructure",
            "nameLocation": "7606:27:31",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 12270,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "7645:8:31"
            },
            "parameters": {
              "id": 12269,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7633:2:31"
            },
            "returnParameters": {
              "id": 12273,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12272,
                  "mutability": "mutable",
                  "name": "dataStructure",
                  "nameLocation": "7689:13:31",
                  "nodeType": "VariableDeclaration",
                  "scope": 12277,
                  "src": "7675:27:31",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 12271,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "7675:6:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7674:29:31"
            },
            "scope": 12303,
            "src": "7597:133:31",
            "stateMutability": "view",
            "virtual": true,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              21867
            ],
            "body": {
              "id": 12285,
              "nodeType": "Block",
              "src": "7837:26:31",
              "statements": [
                {
                  "expression": {
                    "hexValue": "",
                    "id": 12283,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "7854:2:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                      "typeString": "literal_string \"\""
                    },
                    "value": ""
                  },
                  "functionReturnParameters": 12282,
                  "id": 12284,
                  "nodeType": "Return",
                  "src": "7847:9:31"
                }
              ]
            },
            "functionSelector": "3ec92bda",
            "id": 12286,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getClaimDataStructure",
            "nameLocation": "7745:21:31",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 12279,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "7778:8:31"
            },
            "parameters": {
              "id": 12278,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7766:2:31"
            },
            "returnParameters": {
              "id": 12282,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12281,
                  "mutability": "mutable",
                  "name": "dataStructure",
                  "nameLocation": "7822:13:31",
                  "nodeType": "VariableDeclaration",
                  "scope": 12286,
                  "src": "7808:27:31",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 12280,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "7808:6:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7807:29:31"
            },
            "scope": 12303,
            "src": "7736:127:31",
            "stateMutability": "view",
            "virtual": true,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              21872
            ],
            "body": {
              "id": 12294,
              "nodeType": "Block",
              "src": "7974:26:31",
              "statements": [
                {
                  "expression": {
                    "hexValue": "",
                    "id": 12292,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "7991:2:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                      "typeString": "literal_string \"\""
                    },
                    "value": ""
                  },
                  "functionReturnParameters": 12291,
                  "id": 12293,
                  "nodeType": "Return",
                  "src": "7984:9:31"
                }
              ]
            },
            "functionSelector": "39cf5e16",
            "id": 12295,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getPayoutDataStructure",
            "nameLocation": "7881:22:31",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 12288,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "7915:8:31"
            },
            "parameters": {
              "id": 12287,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7903:2:31"
            },
            "returnParameters": {
              "id": 12291,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12290,
                  "mutability": "mutable",
                  "name": "dataStructure",
                  "nameLocation": "7959:13:31",
                  "nodeType": "VariableDeclaration",
                  "scope": 12295,
                  "src": "7945:27:31",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 12289,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "7945:6:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7944:29:31"
            },
            "scope": 12303,
            "src": "7872:128:31",
            "stateMutability": "view",
            "virtual": true,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              21877
            ],
            "body": {
              "id": 12301,
              "nodeType": "Block",
              "src": "8084:3:31",
              "statements": []
            },
            "functionSelector": "f4fdc1fa",
            "id": 12302,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "riskPoolCapacityCallback",
            "nameLocation": "8015:24:31",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 12299,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "8067:8:31"
            },
            "parameters": {
              "id": 12298,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12297,
                  "mutability": "mutable",
                  "name": "capacity",
                  "nameLocation": "8048:8:31",
                  "nodeType": "VariableDeclaration",
                  "scope": 12302,
                  "src": "8040:16:31",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 12296,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8040:7:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8039:18:31"
            },
            "returnParameters": {
              "id": 12300,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8084:0:31"
            },
            "scope": 12303,
            "src": "8006:81:31",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "external"
          }
        ],
        "scope": 12304,
        "src": "233:7856:31"
      }
    ],
    "src": "39:8051:31"
  },
  "bytecode": "",
  "bytecodeSha1": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
  "compiler": {
    "evm_version": "istanbul",
    "optimizer": {
      "enabled": true,
      "runs": 200
    },
    "version": "0.8.2+commit.661d1103"
  },
  "contractName": "Product",
  "coverageMap": {
    "branches": {},
    "statements": {}
  },
  "dependencies": [
    "etherisc/gif-interface@3b0002a/Component",
    "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/IProduct",
    "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": [
    233,
    8089
  ],
  "opcodes": "",
  "pcMap": {},
  "sha1": "14dc3776cb07c2009254ab1c5d030df3856d93a8",
  "source": "// SPDX-License-Identifier: Apache-2.0\npragma solidity 0.8.2;\n\nimport \"./IProduct.sol\";\nimport \"./Component.sol\";\nimport \"../modules/IPolicy.sol\";\nimport \"../services/IInstanceService.sol\";\nimport \"../services/IProductService.sol\";\n\nabstract contract Product is\n    IProduct, \n    Component \n{    \n    address private _policyFlow; // policy flow contract to use for this procut\n    address private _token; // erc20 token to use for this product\n    uint256 private _riskpoolId; // id of riskpool responsible for this product\n\n    IProductService internal _productService;\n    IInstanceService internal _instanceService;\n\n    modifier onlyPolicyHolder(bytes32 policyId) {\n        address policyHolder = _instanceService.getMetadata(policyId).owner;\n        require(\n            _msgSender() == policyHolder, \n            \"ERROR:PRD-001:POLICY_OR_HOLDER_INVALID\"\n        );\n        _;\n    }\n\n    modifier onlyLicence {\n        require(\n             _msgSender() == _getContractAddress(\"Licence\"),\n            \"ERROR:PRD-002:ACCESS_DENIED\"\n        );\n        _;\n    }\n\n    modifier onlyOracle {\n        require(\n             _msgSender() == _getContractAddress(\"Query\"),\n            \"ERROR:PRD-003:ACCESS_DENIED\"\n        );\n        _;\n    }\n\n    constructor(\n        bytes32 name,\n        address token,\n        bytes32 policyFlow,\n        uint256 riskpoolId,\n        address registry\n    )\n        Component(name, ComponentType.Product, registry)\n    {\n        _token = token;\n        _riskpoolId = riskpoolId;\n\n        // TODO add validation for policy flow\n        _policyFlow = _getContractAddress(policyFlow);\n        _productService = IProductService(_getContractAddress(\"ProductService\"));\n        _instanceService = IInstanceService(_getContractAddress(\"InstanceService\"));\n\n        emit LogProductCreated(address(this));\n    }\n\n    function getToken() public override view returns(address) {\n        return _token;\n    }\n\n    function getPolicyFlow() public view override returns(address) {\n        return _policyFlow;\n    }\n\n    function getRiskpoolId() public override view returns(uint256) {\n        return _riskpoolId;\n    }\n\n    // default callback function implementations\n    function _afterApprove() internal override { emit LogProductApproved(getId()); }\n\n    function _afterPropose() internal override { emit LogProductProposed(getId()); }\n    function _afterDecline() internal override { emit LogProductDeclined(getId()); }\n\n    function _newApplication(\n        address applicationOwner,\n        uint256 premiumAmount,\n        uint256 sumInsuredAmount,\n        bytes memory metaData, \n        bytes memory applicationData \n    )\n        internal\n        returns(bytes32 processId)\n    {\n        processId = _productService.newApplication(\n            applicationOwner, \n            premiumAmount, \n            sumInsuredAmount, \n            metaData, \n            applicationData);\n    }\n\n    function _collectPremium(bytes32 processId) \n        internal\n        returns(\n            bool success,\n            uint256 feeAmount,\n            uint256 netAmount\n        )\n    {\n        IPolicy.Policy memory policy = _getPolicy(processId);\n\n        if (policy.premiumPaidAmount < policy.premiumExpectedAmount) {\n            (success, feeAmount, netAmount) \n                = _collectPremium(\n                    processId, \n                    policy.premiumExpectedAmount - policy.premiumPaidAmount\n                );\n        }\n    }\n\n    function _collectPremium(\n        bytes32 processId,\n        uint256 amount\n    )\n        internal\n        returns(\n            bool success,\n            uint256 feeAmount,\n            uint256 netAmount\n        )\n    {\n        (success, feeAmount, netAmount) = _productService.collectPremium(processId, amount);\n    }\n\n    function _adjustPremiumSumInsured(\n        bytes32 processId,\n        uint256 expectedPremiumAmount,\n        uint256 sumInsuredAmount\n    ) internal {\n        _productService.adjustPremiumSumInsured(processId, expectedPremiumAmount, sumInsuredAmount);\n    }\n\n    function _revoke(bytes32 processId) internal {\n        _productService.revoke(processId);\n    }\n\n    function _underwrite(bytes32 processId) internal returns(bool success) {\n        success = _productService.underwrite(processId);\n    }\n\n    function _decline(bytes32 processId) internal {\n        _productService.decline(processId);\n    }\n\n    function _expire(bytes32 processId) internal {\n        _productService.expire(processId);\n    }\n\n    function _close(bytes32 processId) internal {\n        _productService.close(processId);\n    }\n\n    function _newClaim(\n        bytes32 processId, \n        uint256 claimAmount,\n        bytes memory data\n    ) \n        internal\n        returns (uint256 claimId)\n    {\n        claimId = _productService.newClaim(\n            processId, \n            claimAmount, \n            data);\n    }\n\n    function _confirmClaim(\n        bytes32 processId,\n        uint256 claimId,\n        uint256 payoutAmount\n    )\n        internal\n    {\n        _productService.confirmClaim(\n            processId, \n            claimId, \n            payoutAmount);\n    }\n\n    function _declineClaim(bytes32 processId, uint256 claimId) internal {\n        _productService.declineClaim(processId, claimId);\n    }\n\n    function _closeClaim(bytes32 processId, uint256 claimId) internal {\n        _productService.closeClaim(processId, claimId);\n    }\n\n    function _newPayout(\n        bytes32 processId,\n        uint256 claimId,\n        uint256 amount,\n        bytes memory data\n    )\n        internal\n        returns(uint256 payoutId)\n    {\n        payoutId = _productService.newPayout(processId, claimId, amount, data);\n    }\n\n    function _processPayout(\n        bytes32 processId,\n        uint256 payoutId\n    )\n        internal\n        returns(\n            uint256 feeAmount,\n            uint256 netPayoutAmount\n        )\n    {\n        (\n            feeAmount,\n            netPayoutAmount\n        ) = _productService.processPayout(processId, payoutId);\n    }\n\n    function _request(\n        bytes32 processId,\n        bytes memory input,\n        string memory callbackMethodName,\n        uint256 responsibleOracleId\n    )\n        internal\n        returns (uint256 requestId)\n    {\n        requestId = _productService.request(\n            processId,\n            input,\n            callbackMethodName,\n            address(this),\n            responsibleOracleId\n        );\n    }\n\n    function _cancelRequest(uint256 requestId)\n        internal\n    {\n        _productService.cancelRequest(requestId);\n    }\n\n    function _getMetadata(bytes32 processId) \n        internal \n        view \n        returns (IPolicy.Metadata memory metadata) \n    {\n        return _instanceService.getMetadata(processId);\n    }\n\n    function _getApplication(bytes32 processId) \n        internal \n        view \n        returns (IPolicy.Application memory application) \n    {\n        return _instanceService.getApplication(processId);\n    }\n\n    function _getPolicy(bytes32 processId) \n        internal \n        view \n        returns (IPolicy.Policy memory policy) \n    {\n        return _instanceService.getPolicy(processId);\n    }\n\n    function _getClaim(bytes32 processId, uint256 claimId) \n        internal \n        view \n        returns (IPolicy.Claim memory claim) \n    {\n        return _instanceService.getClaim(processId, claimId);\n    }\n\n    function _getPayout(bytes32 processId, uint256 payoutId) \n        internal \n        view \n        returns (IPolicy.Payout memory payout) \n    {\n        return _instanceService.getPayout(processId, payoutId);\n    }\n\n    function getApplicationDataStructure() external override virtual view returns(string memory dataStructure) {\n        return \"\";\n    }\n\n    function getClaimDataStructure() external override virtual view returns(string memory dataStructure) {\n        return \"\";\n    }    \n    function getPayoutDataStructure() external override virtual view returns(string memory dataStructure) {\n        return \"\";\n    }\n\n    function riskPoolCapacityCallback(uint256 capacity) external override virtual { }\n}\n",
  "sourceMap": "",
  "sourcePath": "/home/vscode/.brownie/packages/etherisc/gif-interface@3b0002a/contracts/components/Product.sol",
  "type": "contract"
}