{
  "contractName": "ICTLogic",
  "abi": [
    {
      "inputs": [],
      "name": "_",
      "outputs": [],
      "stateMutability": "pure",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.6.11+commit.5ef660b1\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"_\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"/Users/johannes/Documents/dev/actus-protocol/ap-monorepo/packages/ap-contracts/contracts/ICT/ICTFactory.sol\":\"ICTLogic\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/Users/johannes/Documents/dev/actus-protocol/ap-monorepo/packages/ap-contracts/contracts/ICT/ICTFactory.sol\":{\"keccak256\":\"0xdb5541008c982a6caed3699fe0f73368f7e1ae305075558931d686f3056bba53\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://28762da3d9803a27403face7aa7bfe4a8a7c24a083d2e51aa37781597c2b2cff\",\"dweb:/ipfs/QmW6Cq9zTs9bUdQ1DJQSdzBtJnLeSkHcLzt5Wmie71FaNr\"]},\"/Users/johannes/Documents/dev/actus-protocol/ap-monorepo/packages/ap-contracts/contracts/ICT/IInitializableICT.sol\":{\"keccak256\":\"0x05a23843bf803c53c9dcf7cfece6581e23ae982fe705c77486ee7c5b9d91be9a\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://c58dbdafc3c50b920cd4ad927530867913a9f08d7b480dc00c18142ea7068e02\",\"dweb:/ipfs/QmdQxVbSbGPM3nCNq82tTtL1hSrwxgQeSWtEVFQpPxdteU\"]},\"/Users/johannes/Documents/dev/actus-protocol/ap-monorepo/packages/ap-contracts/contracts/proxy/ProxyFactory.sol\":{\"keccak256\":\"0xc3942bee11e73ceca1ef49154ba1a6dbe3ac25ce5e369d72db0f82185d1d10ba\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://f1fc9bb98809b73920ac896aa9cbac809f3990a39f10dc06f2f3156f270dee79\",\"dweb:/ipfs/QmVPJojnqGrcMuJ1nvNbxJwLWBsbmkJtWePw55QU5Hk1Xc\"]},\"@openzeppelin/contracts-ethereum-package/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x6cc1cb934a3ac2137a7dcaed018af9e235392236ceecfd3687259702b9c767ad\",\"urls\":[\"bzz-raw://0055fa88138cd1c3c6440370f8580f85857f8fe9dec41c99af9eafbeb8d9c3ce\",\"dweb:/ipfs/QmX1xDh8vwGLLCH8ti45eXjQ7Wcxv1FEGTR3jkFnd5Nv6F\"]},\"@openzeppelin/contracts-ethereum-package/contracts/utils/Address.sol\":{\"keccak256\":\"0x5f7da58ee3d9faa9b8999a93d49c8ff978f1afc88ae9bcfc6f9cbb44da011c2b\",\"urls\":[\"bzz-raw://4f089d954b3ecaa26949412fe63e9a184b056562c6c13dd4a0529a5d9a2e685a\",\"dweb:/ipfs/QmVK5iCNAMcEJQxT59bsC5E53JQASDQPU6khHox3d5ZXCn\"]}},\"version\":1}",
  "bytecode": "0x60be610024600b82828239805160001a607314601757fe5b30600052607381538281f3fe730000000000000000000000000000000000000000301460806040526004361060335760003560e01c8063b7ba4583146038575b600080fd5b603e6040565b005b60405162461bcd60e51b8152600401605690605f565b60405180910390fd5b6020808252600f908201526e1b995d995c8819195c1b1bde481a5d608a1b60408201526060019056fea26469706673582212207d8145c5db61f85ac15c5332aea534bdd6d46750ac77c395febcd0bc3626727b64736f6c634300060b0033",
  "deployedBytecode": "0x730000000000000000000000000000000000000000301460806040526004361060335760003560e01c8063b7ba4583146038575b600080fd5b603e6040565b005b60405162461bcd60e51b8152600401605690605f565b60405180910390fd5b6020808252600f908201526e1b995d995c8819195c1b1bde481a5d608a1b60408201526060019056fea26469706673582212207d8145c5db61f85ac15c5332aea534bdd6d46750ac77c395febcd0bc3626727b64736f6c634300060b0033",
  "immutableReferences": {},
  "sourceMap": "316:80:65:-:0;;;;;;;;;;;;;;;;;;;;;;;;;",
  "deployedSourceMap": "316:80:65:-:0;;;;;;;;;;;;;;;;;;;;;;;;339:55;;;:::i;:::-;;;366:25;;-1:-1:-1;;;366:25:65;;;;;;;:::i;:::-;;;;;;;;329:416:-1;529:2;543:47;;;230:2;514:18;;;856:19;-1:-1;;;896:14;;;246:38;303:12;;;500:245::o",
  "source": "// \"SPDX-License-Identifier: Apache-2.0\"\npragma solidity ^0.6.11;\npragma experimental ABIEncoderV2;\n\nimport \"@openzeppelin/contracts-ethereum-package/contracts/token/ERC20/IERC20.sol\";\nimport \"./IInitializableICT.sol\";\nimport \"../proxy/ProxyFactory.sol\";\n\n// @dev Mock lib to link pre-deployed ProxySafeICT contract\nlibrary ICTLogic {\n    function _() public pure { revert(\"never deploy it\"); }\n}\n\n/**\n * @title ICTFactory\n * @notice Factory for deploying ProxySafeICT contracts\n */\ncontract ICTFactory is ProxyFactory {\n\n    event DeployedICT(address icToken, address creator);\n\n\n    /*\n     * deploys and initializes a new ICT (proxy) contract\n     * @param assetRegistry\n     * @param dataRegistry\n     * @param marketObjectCode\n     * @param owner of the new ICT contract\n     * @param salt as defined by EIP-1167\n     */\n    function createICToken(\n        address assetRegistry,\n        address dataRegistry,\n        bytes32 marketObjectCode,\n        address owner,\n        uint256 salt\n    )\n        external\n    {\n        address logic = address(ICTLogic);\n\n        address icToken = create2Eip1167Proxy(logic, salt);\n        IInitializableICT(icToken).initialize(assetRegistry, dataRegistry, marketObjectCode, owner);\n\n        emit DeployedICT(icToken, msg.sender);\n    }\n}\n",
  "sourcePath": "/Users/johannes/Documents/dev/actus-protocol/ap-monorepo/packages/ap-contracts/contracts/ICT/ICTFactory.sol",
  "ast": {
    "absolutePath": "/Users/johannes/Documents/dev/actus-protocol/ap-monorepo/packages/ap-contracts/contracts/ICT/ICTFactory.sol",
    "exportedSymbols": {
      "ICTFactory": [
        21275
      ],
      "ICTLogic": [
        21221
      ]
    },
    "id": 21276,
    "license": "Apache-2.0",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 21208,
        "literals": [
          "solidity",
          "^",
          "0.6",
          ".11"
        ],
        "nodeType": "PragmaDirective",
        "src": "41:24:65"
      },
      {
        "id": 21209,
        "literals": [
          "experimental",
          "ABIEncoderV2"
        ],
        "nodeType": "PragmaDirective",
        "src": "66:33:65"
      },
      {
        "absolutePath": "@openzeppelin/contracts-ethereum-package/contracts/token/ERC20/IERC20.sol",
        "file": "@openzeppelin/contracts-ethereum-package/contracts/token/ERC20/IERC20.sol",
        "id": 21210,
        "nodeType": "ImportDirective",
        "scope": 21276,
        "sourceUnit": 38236,
        "src": "101:83:65",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/johannes/Documents/dev/actus-protocol/ap-monorepo/packages/ap-contracts/contracts/ICT/IInitializableICT.sol",
        "file": "./IInitializableICT.sol",
        "id": 21211,
        "nodeType": "ImportDirective",
        "scope": 21276,
        "sourceUnit": 21291,
        "src": "185:33:65",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/johannes/Documents/dev/actus-protocol/ap-monorepo/packages/ap-contracts/contracts/proxy/ProxyFactory.sol",
        "file": "../proxy/ProxyFactory.sol",
        "id": 21212,
        "nodeType": "ImportDirective",
        "scope": 21276,
        "sourceUnit": 22446,
        "src": "219:35:65",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "library",
        "documentation": null,
        "fullyImplemented": true,
        "id": 21221,
        "linearizedBaseContracts": [
          21221
        ],
        "name": "ICTLogic",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": {
              "id": 21219,
              "nodeType": "Block",
              "src": "364:30:65",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "6e65766572206465706c6f79206974",
                        "id": 21216,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "373:17:65",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_5c3ea3824b28fc802dfb22c706b19be143660cb22579e35d4b0641d8d633d1b4",
                          "typeString": "literal_string \"never deploy it\""
                        },
                        "value": "never deploy it"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_stringliteral_5c3ea3824b28fc802dfb22c706b19be143660cb22579e35d4b0641d8d633d1b4",
                          "typeString": "literal_string \"never deploy it\""
                        }
                      ],
                      "id": 21215,
                      "name": "revert",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -19,
                        -19
                      ],
                      "referencedDeclaration": -19,
                      "src": "366:6:65",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (string memory) pure"
                      }
                    },
                    "id": 21217,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "366:25:65",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 21218,
                  "nodeType": "ExpressionStatement",
                  "src": "366:25:65"
                }
              ]
            },
            "documentation": null,
            "functionSelector": "b7ba4583",
            "id": 21220,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 21213,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "349:2:65"
            },
            "returnParameters": {
              "id": 21214,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "364:0:65"
            },
            "scope": 21221,
            "src": "339:55:65",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "public"
          }
        ],
        "scope": 21276,
        "src": "316:80:65"
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 21223,
              "name": "ProxyFactory",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 22445,
              "src": "506:12:65",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ProxyFactory_$22445",
                "typeString": "contract ProxyFactory"
              }
            },
            "id": 21224,
            "nodeType": "InheritanceSpecifier",
            "src": "506:12:65"
          }
        ],
        "contractDependencies": [
          22445
        ],
        "contractKind": "contract",
        "documentation": {
          "id": 21222,
          "nodeType": "StructuredDocumentation",
          "src": "398:84:65",
          "text": " @title ICTFactory\n @notice Factory for deploying ProxySafeICT contracts"
        },
        "fullyImplemented": true,
        "id": 21275,
        "linearizedBaseContracts": [
          21275,
          22445
        ],
        "name": "ICTFactory",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "anonymous": false,
            "documentation": null,
            "id": 21230,
            "name": "DeployedICT",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 21229,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21226,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "icToken",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 21230,
                  "src": "544:15:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 21225,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "544:7:65",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 21228,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "creator",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 21230,
                  "src": "561:15:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 21227,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "561:7:65",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "543:34:65"
            },
            "src": "526:52:65"
          },
          {
            "body": {
              "id": 21273,
              "nodeType": "Block",
              "src": "1020:260:65",
              "statements": [
                {
                  "assignments": [
                    21244
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 21244,
                      "mutability": "mutable",
                      "name": "logic",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 21273,
                      "src": "1030:13:65",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 21243,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "1030:7:65",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 21249,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 21247,
                        "name": "ICTLogic",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21221,
                        "src": "1054:8:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_ICTLogic_$21221_$",
                          "typeString": "type(library ICTLogic)"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_type$_t_contract$_ICTLogic_$21221_$",
                          "typeString": "type(library ICTLogic)"
                        }
                      ],
                      "id": 21246,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "1046:7:65",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": {
                        "id": 21245,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "1046:7:65",
                        "typeDescriptions": {
                          "typeIdentifier": null,
                          "typeString": null
                        }
                      }
                    },
                    "id": 21248,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1046:17:65",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1030:33:65"
                },
                {
                  "assignments": [
                    21251
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 21251,
                      "mutability": "mutable",
                      "name": "icToken",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 21273,
                      "src": "1074:15:65",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 21250,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "1074:7:65",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 21256,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 21253,
                        "name": "logic",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21244,
                        "src": "1112:5:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 21254,
                        "name": "salt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21240,
                        "src": "1119:4:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 21252,
                      "name": "create2Eip1167Proxy",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 22444,
                      "src": "1092:19:65",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_address_$",
                        "typeString": "function (address,uint256) returns (address)"
                      }
                    },
                    "id": 21255,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1092:32:65",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1074:50:65"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 21261,
                        "name": "assetRegistry",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21232,
                        "src": "1172:13:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 21262,
                        "name": "dataRegistry",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21234,
                        "src": "1187:12:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 21263,
                        "name": "marketObjectCode",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21236,
                        "src": "1201:16:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 21264,
                        "name": "owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21238,
                        "src": "1219:5:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 21258,
                            "name": "icToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 21251,
                            "src": "1152:7:65",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 21257,
                          "name": "IInitializableICT",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 21290,
                          "src": "1134:17:65",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_IInitializableICT_$21290_$",
                            "typeString": "type(contract IInitializableICT)"
                          }
                        },
                        "id": 21259,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1134:26:65",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IInitializableICT_$21290",
                          "typeString": "contract IInitializableICT"
                        }
                      },
                      "id": 21260,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "initialize",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21289,
                      "src": "1134:37:65",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_bytes32_$_t_address_$returns$__$",
                        "typeString": "function (address,address,bytes32,address) external"
                      }
                    },
                    "id": 21265,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1134:91:65",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 21266,
                  "nodeType": "ExpressionStatement",
                  "src": "1134:91:65"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 21268,
                        "name": "icToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21251,
                        "src": "1253:7:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 21269,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "1262:3:65",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 21270,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "1262:10:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 21267,
                      "name": "DeployedICT",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21230,
                      "src": "1241:11:65",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$",
                        "typeString": "function (address,address)"
                      }
                    },
                    "id": 21271,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1241:32:65",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 21272,
                  "nodeType": "EmitStatement",
                  "src": "1236:37:65"
                }
              ]
            },
            "documentation": null,
            "functionSelector": "d8e5cef2",
            "id": 21274,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "createICToken",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 21241,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21232,
                  "mutability": "mutable",
                  "name": "assetRegistry",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 21274,
                  "src": "862:21:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 21231,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "862:7:65",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 21234,
                  "mutability": "mutable",
                  "name": "dataRegistry",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 21274,
                  "src": "893:20:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 21233,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "893:7:65",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 21236,
                  "mutability": "mutable",
                  "name": "marketObjectCode",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 21274,
                  "src": "923:24:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 21235,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "923:7:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 21238,
                  "mutability": "mutable",
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 21274,
                  "src": "957:13:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 21237,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "957:7:65",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 21240,
                  "mutability": "mutable",
                  "name": "salt",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 21274,
                  "src": "980:12:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 21239,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "980:7:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "852:146:65"
            },
            "returnParameters": {
              "id": 21242,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1020:0:65"
            },
            "scope": 21275,
            "src": "830:450:65",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          }
        ],
        "scope": 21276,
        "src": "483:799:65"
      }
    ],
    "src": "41:1242:65"
  },
  "legacyAST": {
    "absolutePath": "/Users/johannes/Documents/dev/actus-protocol/ap-monorepo/packages/ap-contracts/contracts/ICT/ICTFactory.sol",
    "exportedSymbols": {
      "ICTFactory": [
        21275
      ],
      "ICTLogic": [
        21221
      ]
    },
    "id": 21276,
    "license": "Apache-2.0",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 21208,
        "literals": [
          "solidity",
          "^",
          "0.6",
          ".11"
        ],
        "nodeType": "PragmaDirective",
        "src": "41:24:65"
      },
      {
        "id": 21209,
        "literals": [
          "experimental",
          "ABIEncoderV2"
        ],
        "nodeType": "PragmaDirective",
        "src": "66:33:65"
      },
      {
        "absolutePath": "@openzeppelin/contracts-ethereum-package/contracts/token/ERC20/IERC20.sol",
        "file": "@openzeppelin/contracts-ethereum-package/contracts/token/ERC20/IERC20.sol",
        "id": 21210,
        "nodeType": "ImportDirective",
        "scope": 21276,
        "sourceUnit": 38236,
        "src": "101:83:65",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/johannes/Documents/dev/actus-protocol/ap-monorepo/packages/ap-contracts/contracts/ICT/IInitializableICT.sol",
        "file": "./IInitializableICT.sol",
        "id": 21211,
        "nodeType": "ImportDirective",
        "scope": 21276,
        "sourceUnit": 21291,
        "src": "185:33:65",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/johannes/Documents/dev/actus-protocol/ap-monorepo/packages/ap-contracts/contracts/proxy/ProxyFactory.sol",
        "file": "../proxy/ProxyFactory.sol",
        "id": 21212,
        "nodeType": "ImportDirective",
        "scope": 21276,
        "sourceUnit": 22446,
        "src": "219:35:65",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "library",
        "documentation": null,
        "fullyImplemented": true,
        "id": 21221,
        "linearizedBaseContracts": [
          21221
        ],
        "name": "ICTLogic",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": {
              "id": 21219,
              "nodeType": "Block",
              "src": "364:30:65",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "6e65766572206465706c6f79206974",
                        "id": 21216,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "373:17:65",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_5c3ea3824b28fc802dfb22c706b19be143660cb22579e35d4b0641d8d633d1b4",
                          "typeString": "literal_string \"never deploy it\""
                        },
                        "value": "never deploy it"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_stringliteral_5c3ea3824b28fc802dfb22c706b19be143660cb22579e35d4b0641d8d633d1b4",
                          "typeString": "literal_string \"never deploy it\""
                        }
                      ],
                      "id": 21215,
                      "name": "revert",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -19,
                        -19
                      ],
                      "referencedDeclaration": -19,
                      "src": "366:6:65",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (string memory) pure"
                      }
                    },
                    "id": 21217,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "366:25:65",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 21218,
                  "nodeType": "ExpressionStatement",
                  "src": "366:25:65"
                }
              ]
            },
            "documentation": null,
            "functionSelector": "b7ba4583",
            "id": 21220,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 21213,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "349:2:65"
            },
            "returnParameters": {
              "id": 21214,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "364:0:65"
            },
            "scope": 21221,
            "src": "339:55:65",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "public"
          }
        ],
        "scope": 21276,
        "src": "316:80:65"
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 21223,
              "name": "ProxyFactory",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 22445,
              "src": "506:12:65",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ProxyFactory_$22445",
                "typeString": "contract ProxyFactory"
              }
            },
            "id": 21224,
            "nodeType": "InheritanceSpecifier",
            "src": "506:12:65"
          }
        ],
        "contractDependencies": [
          22445
        ],
        "contractKind": "contract",
        "documentation": {
          "id": 21222,
          "nodeType": "StructuredDocumentation",
          "src": "398:84:65",
          "text": " @title ICTFactory\n @notice Factory for deploying ProxySafeICT contracts"
        },
        "fullyImplemented": true,
        "id": 21275,
        "linearizedBaseContracts": [
          21275,
          22445
        ],
        "name": "ICTFactory",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "anonymous": false,
            "documentation": null,
            "id": 21230,
            "name": "DeployedICT",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 21229,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21226,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "icToken",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 21230,
                  "src": "544:15:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 21225,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "544:7:65",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 21228,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "creator",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 21230,
                  "src": "561:15:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 21227,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "561:7:65",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "543:34:65"
            },
            "src": "526:52:65"
          },
          {
            "body": {
              "id": 21273,
              "nodeType": "Block",
              "src": "1020:260:65",
              "statements": [
                {
                  "assignments": [
                    21244
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 21244,
                      "mutability": "mutable",
                      "name": "logic",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 21273,
                      "src": "1030:13:65",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 21243,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "1030:7:65",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 21249,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 21247,
                        "name": "ICTLogic",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21221,
                        "src": "1054:8:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_ICTLogic_$21221_$",
                          "typeString": "type(library ICTLogic)"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_type$_t_contract$_ICTLogic_$21221_$",
                          "typeString": "type(library ICTLogic)"
                        }
                      ],
                      "id": 21246,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "1046:7:65",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": {
                        "id": 21245,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "1046:7:65",
                        "typeDescriptions": {
                          "typeIdentifier": null,
                          "typeString": null
                        }
                      }
                    },
                    "id": 21248,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1046:17:65",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1030:33:65"
                },
                {
                  "assignments": [
                    21251
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 21251,
                      "mutability": "mutable",
                      "name": "icToken",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 21273,
                      "src": "1074:15:65",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 21250,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "1074:7:65",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 21256,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 21253,
                        "name": "logic",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21244,
                        "src": "1112:5:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 21254,
                        "name": "salt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21240,
                        "src": "1119:4:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 21252,
                      "name": "create2Eip1167Proxy",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 22444,
                      "src": "1092:19:65",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_address_$",
                        "typeString": "function (address,uint256) returns (address)"
                      }
                    },
                    "id": 21255,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1092:32:65",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1074:50:65"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 21261,
                        "name": "assetRegistry",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21232,
                        "src": "1172:13:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 21262,
                        "name": "dataRegistry",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21234,
                        "src": "1187:12:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 21263,
                        "name": "marketObjectCode",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21236,
                        "src": "1201:16:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 21264,
                        "name": "owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21238,
                        "src": "1219:5:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 21258,
                            "name": "icToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 21251,
                            "src": "1152:7:65",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 21257,
                          "name": "IInitializableICT",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 21290,
                          "src": "1134:17:65",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_IInitializableICT_$21290_$",
                            "typeString": "type(contract IInitializableICT)"
                          }
                        },
                        "id": 21259,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1134:26:65",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IInitializableICT_$21290",
                          "typeString": "contract IInitializableICT"
                        }
                      },
                      "id": 21260,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "initialize",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21289,
                      "src": "1134:37:65",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_bytes32_$_t_address_$returns$__$",
                        "typeString": "function (address,address,bytes32,address) external"
                      }
                    },
                    "id": 21265,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1134:91:65",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 21266,
                  "nodeType": "ExpressionStatement",
                  "src": "1134:91:65"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 21268,
                        "name": "icToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21251,
                        "src": "1253:7:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 21269,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "1262:3:65",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 21270,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "1262:10:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 21267,
                      "name": "DeployedICT",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21230,
                      "src": "1241:11:65",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$",
                        "typeString": "function (address,address)"
                      }
                    },
                    "id": 21271,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1241:32:65",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 21272,
                  "nodeType": "EmitStatement",
                  "src": "1236:37:65"
                }
              ]
            },
            "documentation": null,
            "functionSelector": "d8e5cef2",
            "id": 21274,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "createICToken",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 21241,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21232,
                  "mutability": "mutable",
                  "name": "assetRegistry",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 21274,
                  "src": "862:21:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 21231,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "862:7:65",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 21234,
                  "mutability": "mutable",
                  "name": "dataRegistry",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 21274,
                  "src": "893:20:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 21233,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "893:7:65",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 21236,
                  "mutability": "mutable",
                  "name": "marketObjectCode",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 21274,
                  "src": "923:24:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 21235,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "923:7:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 21238,
                  "mutability": "mutable",
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 21274,
                  "src": "957:13:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 21237,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "957:7:65",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 21240,
                  "mutability": "mutable",
                  "name": "salt",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 21274,
                  "src": "980:12:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 21239,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "980:7:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "852:146:65"
            },
            "returnParameters": {
              "id": 21242,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1020:0:65"
            },
            "scope": 21275,
            "src": "830:450:65",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          }
        ],
        "scope": 21276,
        "src": "483:799:65"
      }
    ],
    "src": "41:1242:65"
  },
  "compiler": {
    "name": "solc",
    "version": "0.6.11+commit.5ef660b1.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.2.0",
  "updatedAt": "2020-08-12T09:47:18.215Z",
  "devdoc": {
    "kind": "dev",
    "methods": {},
    "version": 1
  },
  "userdoc": {
    "kind": "user",
    "methods": {},
    "version": 1
  }
}