{
  "contractName": "VanillaFDTLogic",
  "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/FDT/FDTFactory.sol\":\"VanillaFDTLogic\"},\"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/FDT/FDTFactory.sol\":{\"keccak256\":\"0x7488fc2b008a367e19e72a4d6403dc3fc34f7ba4c7250e8f64c4684a1706b2f1\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://b46e2ce4ccb45eb3247a7a32b02e7c7bdd144b58bf7f1f5c0e849487a8dca01b\",\"dweb:/ipfs/QmSm1evy1eoCBKPwsYe7dZuA4zFV4Mr6zcJKTmHF3DKuMv\"]},\"/Users/johannes/Documents/dev/actus-protocol/ap-monorepo/packages/ap-contracts/contracts/FDT/IInitializableFDT.sol\":{\"keccak256\":\"0x367de24e2fcd7cd02aabe65af0afc0c5184781135bb826835a82d406f33c93b5\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://f08d02e99e8daf2be5f2067c12f2c81aff1983fa49eebbe9cf5bea75ae4f308c\",\"dweb:/ipfs/QmX1xtraEs8QwFF9tBTBPnuoU5mP3k9X9U1Y9eMoEjNyB7\"]},\"/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": "0x60be610024600b82828239805160001a607314601757fe5b30600052607381538281f3fe730000000000000000000000000000000000000000301460806040526004361060335760003560e01c8063b7ba4583146038575b600080fd5b603e6040565b005b60405162461bcd60e51b8152600401605690605f565b60405180910390fd5b6020808252600f908201526e1b995d995c8819195c1b1bde481a5d608a1b60408201526060019056fea2646970667358221220d90cb6cbf7a78a2672aefe04dcc0cb957e0a54b52d7d21be93b0e1cbf98b0b8964736f6c634300060b0033",
  "deployedBytecode": "0x730000000000000000000000000000000000000000301460806040526004361060335760003560e01c8063b7ba4583146038575b600080fd5b603e6040565b005b60405162461bcd60e51b8152600401605690605f565b60405180910390fd5b6020808252600f908201526e1b995d995c8819195c1b1bde481a5d608a1b60408201526060019056fea2646970667358221220d90cb6cbf7a78a2672aefe04dcc0cb957e0a54b52d7d21be93b0e1cbf98b0b8964736f6c634300060b0033",
  "immutableReferences": {},
  "sourceMap": "323:87:47:-:0;;;;;;;;;;;;;;;;;;;;;;;;;",
  "deployedSourceMap": "323:87:47:-:0;;;;;;;;;;;;;;;;;;;;;;;;353:55;;;:::i;:::-;;;380:25;;-1:-1:-1;;;380:25:47;;;;;;;:::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 \"./IInitializableFDT.sol\";\nimport \"../proxy/ProxyFactory.sol\";\n\n// @dev Mock lib to link pre-deployed ProxySafeVanillaFDT contract\nlibrary VanillaFDTLogic {\n    function _() public pure { revert(\"never deploy it\"); }\n}\n\n// @dev Mock lib to link pre-deployed ProxySafeSimpleRestrictedFDT contract\nlibrary SimpleRestrictedFDTLogic {\n    function _() public pure { revert(\"never deploy it\"); }\n}\n\n/**\n * @title FDTFactory\n * @notice Factory for deploying FDT contracts\n */\ncontract FDTFactory is ProxyFactory {\n\n    event DeployedDistributor(address distributor, address creator);\n\n\n    /**\n     * deploys a new tokenized distributor contract for a specified ERC20 token\n     * @dev mints initial supply after deploying the tokenized distributor contract\n     * @param name name of the token\n     * @param symbol of the token\n     * @param initialSupply of distributor tokens\n     */\n    function createERC20Distributor(\n        string calldata name,\n        string calldata symbol,\n        uint256 initialSupply,\n        IERC20 token,\n        address owner,\n        uint256 salt\n    )\n        external\n    {\n        address logic = address(VanillaFDTLogic);\n        createFDT(name, symbol, initialSupply, token, owner, logic, salt);\n    }\n\n    function createRestrictedERC20Distributor(\n        string calldata name,\n        string calldata symbol,\n        uint256 initialSupply,\n        IERC20 token,\n        address owner,\n        uint256 salt\n    )\n        external\n    {\n        address logic = address(SimpleRestrictedFDTLogic);\n        createFDT(name, symbol, initialSupply, token, owner, logic, salt);\n    }\n\n    function createFDT(\n        string calldata name,\n        string calldata symbol,\n        uint256 initialSupply,\n        IERC20 token,\n        address owner,\n        address logic,\n        uint256 salt\n    )\n        internal\n    {\n        require(\n            address(token) != address(0),\n            \"FDTFactory.createFDT: INVALID_FUNCTION_PARAMETERS\"\n        );\n\n        address distributor = create2Eip1167Proxy(logic, salt);\n        IInitializableFDT(distributor).initialize(name, symbol, token, owner, initialSupply);\n\n        emit DeployedDistributor(distributor, msg.sender);\n    }\n}\n",
  "sourcePath": "/Users/johannes/Documents/dev/actus-protocol/ap-monorepo/packages/ap-contracts/contracts/FDT/FDTFactory.sol",
  "ast": {
    "absolutePath": "/Users/johannes/Documents/dev/actus-protocol/ap-monorepo/packages/ap-contracts/contracts/FDT/FDTFactory.sol",
    "exportedSymbols": {
      "FDTFactory": [
        18027
      ],
      "SimpleRestrictedFDTLogic": [
        17895
      ],
      "VanillaFDTLogic": [
        17886
      ]
    },
    "id": 18028,
    "license": "Apache-2.0",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 17873,
        "literals": [
          "solidity",
          "^",
          "0.6",
          ".11"
        ],
        "nodeType": "PragmaDirective",
        "src": "41:24:47"
      },
      {
        "id": 17874,
        "literals": [
          "experimental",
          "ABIEncoderV2"
        ],
        "nodeType": "PragmaDirective",
        "src": "66:33:47"
      },
      {
        "absolutePath": "@openzeppelin/contracts-ethereum-package/contracts/token/ERC20/IERC20.sol",
        "file": "@openzeppelin/contracts-ethereum-package/contracts/token/ERC20/IERC20.sol",
        "id": 17875,
        "nodeType": "ImportDirective",
        "scope": 18028,
        "sourceUnit": 38236,
        "src": "101:83:47",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/johannes/Documents/dev/actus-protocol/ap-monorepo/packages/ap-contracts/contracts/FDT/IInitializableFDT.sol",
        "file": "./IInitializableFDT.sol",
        "id": 17876,
        "nodeType": "ImportDirective",
        "scope": 18028,
        "sourceUnit": 18362,
        "src": "185:33:47",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/johannes/Documents/dev/actus-protocol/ap-monorepo/packages/ap-contracts/contracts/proxy/ProxyFactory.sol",
        "file": "../proxy/ProxyFactory.sol",
        "id": 17877,
        "nodeType": "ImportDirective",
        "scope": 18028,
        "sourceUnit": 22446,
        "src": "219:35:47",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "library",
        "documentation": null,
        "fullyImplemented": true,
        "id": 17886,
        "linearizedBaseContracts": [
          17886
        ],
        "name": "VanillaFDTLogic",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": {
              "id": 17884,
              "nodeType": "Block",
              "src": "378:30:47",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "6e65766572206465706c6f79206974",
                        "id": 17881,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "387:17:47",
                        "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": 17880,
                      "name": "revert",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -19,
                        -19
                      ],
                      "referencedDeclaration": -19,
                      "src": "380:6:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (string memory) pure"
                      }
                    },
                    "id": 17882,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "380:25:47",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 17883,
                  "nodeType": "ExpressionStatement",
                  "src": "380:25:47"
                }
              ]
            },
            "documentation": null,
            "functionSelector": "b7ba4583",
            "id": 17885,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 17878,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "363:2:47"
            },
            "returnParameters": {
              "id": 17879,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "378:0:47"
            },
            "scope": 17886,
            "src": "353:55:47",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "public"
          }
        ],
        "scope": 18028,
        "src": "323:87:47"
      },
      {
        "abstract": false,
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "library",
        "documentation": null,
        "fullyImplemented": true,
        "id": 17895,
        "linearizedBaseContracts": [
          17895
        ],
        "name": "SimpleRestrictedFDTLogic",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": {
              "id": 17893,
              "nodeType": "Block",
              "src": "552:30:47",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "6e65766572206465706c6f79206974",
                        "id": 17890,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "561:17:47",
                        "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": 17889,
                      "name": "revert",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -19,
                        -19
                      ],
                      "referencedDeclaration": -19,
                      "src": "554:6:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (string memory) pure"
                      }
                    },
                    "id": 17891,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "554:25:47",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 17892,
                  "nodeType": "ExpressionStatement",
                  "src": "554:25:47"
                }
              ]
            },
            "documentation": null,
            "functionSelector": "b7ba4583",
            "id": 17894,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 17887,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "537:2:47"
            },
            "returnParameters": {
              "id": 17888,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "552:0:47"
            },
            "scope": 17895,
            "src": "527:55:47",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "public"
          }
        ],
        "scope": 18028,
        "src": "488:96:47"
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 17897,
              "name": "ProxyFactory",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 22445,
              "src": "685:12:47",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ProxyFactory_$22445",
                "typeString": "contract ProxyFactory"
              }
            },
            "id": 17898,
            "nodeType": "InheritanceSpecifier",
            "src": "685:12:47"
          }
        ],
        "contractDependencies": [
          22445
        ],
        "contractKind": "contract",
        "documentation": {
          "id": 17896,
          "nodeType": "StructuredDocumentation",
          "src": "586:75:47",
          "text": " @title FDTFactory\n @notice Factory for deploying FDT contracts"
        },
        "fullyImplemented": true,
        "id": 18027,
        "linearizedBaseContracts": [
          18027,
          22445
        ],
        "name": "FDTFactory",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "anonymous": false,
            "documentation": null,
            "id": 17904,
            "name": "DeployedDistributor",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 17903,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17900,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "distributor",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 17904,
                  "src": "731:19:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 17899,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "731:7:47",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17902,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "creator",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 17904,
                  "src": "752:15:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 17901,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "752:7:47",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "730:38:47"
            },
            "src": "705:64:47"
          },
          {
            "body": {
              "id": 17937,
              "nodeType": "Block",
              "src": "1296:132:47",
              "statements": [
                {
                  "assignments": [
                    17921
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 17921,
                      "mutability": "mutable",
                      "name": "logic",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 17937,
                      "src": "1306:13:47",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 17920,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "1306:7:47",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 17926,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 17924,
                        "name": "VanillaFDTLogic",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17886,
                        "src": "1330:15:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_VanillaFDTLogic_$17886_$",
                          "typeString": "type(library VanillaFDTLogic)"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_type$_t_contract$_VanillaFDTLogic_$17886_$",
                          "typeString": "type(library VanillaFDTLogic)"
                        }
                      ],
                      "id": 17923,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "1322:7:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": {
                        "id": 17922,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "1322:7:47",
                        "typeDescriptions": {
                          "typeIdentifier": null,
                          "typeString": null
                        }
                      }
                    },
                    "id": 17925,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1322:24:47",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1306:40:47"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 17928,
                        "name": "name",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17907,
                        "src": "1366:4:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_calldata_ptr",
                          "typeString": "string calldata"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 17929,
                        "name": "symbol",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17909,
                        "src": "1372:6:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_calldata_ptr",
                          "typeString": "string calldata"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 17930,
                        "name": "initialSupply",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17911,
                        "src": "1380:13:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 17931,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17913,
                        "src": "1395:5:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$38235",
                          "typeString": "contract IERC20"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 17932,
                        "name": "owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17915,
                        "src": "1402:5:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 17933,
                        "name": "logic",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17921,
                        "src": "1409:5:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 17934,
                        "name": "salt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17917,
                        "src": "1416:4:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_string_calldata_ptr",
                          "typeString": "string calldata"
                        },
                        {
                          "typeIdentifier": "t_string_calldata_ptr",
                          "typeString": "string calldata"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_contract$_IERC20_$38235",
                          "typeString": "contract IERC20"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 17927,
                      "name": "createFDT",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18026,
                      "src": "1356:9:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_string_calldata_ptr_$_t_string_calldata_ptr_$_t_uint256_$_t_contract$_IERC20_$38235_$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (string calldata,string calldata,uint256,contract IERC20,address,address,uint256)"
                      }
                    },
                    "id": 17935,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1356:65:47",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 17936,
                  "nodeType": "ExpressionStatement",
                  "src": "1356:65:47"
                }
              ]
            },
            "documentation": {
              "id": 17905,
              "nodeType": "StructuredDocumentation",
              "src": "776:296:47",
              "text": " deploys a new tokenized distributor contract for a specified ERC20 token\n @dev mints initial supply after deploying the tokenized distributor contract\n @param name name of the token\n @param symbol of the token\n @param initialSupply of distributor tokens"
            },
            "functionSelector": "4a666025",
            "id": 17938,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "createERC20Distributor",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 17918,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17907,
                  "mutability": "mutable",
                  "name": "name",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 17938,
                  "src": "1118:20:47",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_calldata_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 17906,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1118:6:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17909,
                  "mutability": "mutable",
                  "name": "symbol",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 17938,
                  "src": "1148:22:47",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_calldata_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 17908,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1148:6:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17911,
                  "mutability": "mutable",
                  "name": "initialSupply",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 17938,
                  "src": "1180:21:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 17910,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1180:7:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17913,
                  "mutability": "mutable",
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 17938,
                  "src": "1211:12:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20_$38235",
                    "typeString": "contract IERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 17912,
                    "name": "IERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 38235,
                    "src": "1211:6:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20_$38235",
                      "typeString": "contract IERC20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17915,
                  "mutability": "mutable",
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 17938,
                  "src": "1233:13:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 17914,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1233:7:47",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17917,
                  "mutability": "mutable",
                  "name": "salt",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 17938,
                  "src": "1256:12:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 17916,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1256:7:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1108:166:47"
            },
            "returnParameters": {
              "id": 17919,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1296:0:47"
            },
            "scope": 18027,
            "src": "1077:351:47",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 17970,
              "nodeType": "Block",
              "src": "1663:141:47",
              "statements": [
                {
                  "assignments": [
                    17954
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 17954,
                      "mutability": "mutable",
                      "name": "logic",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 17970,
                      "src": "1673:13:47",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 17953,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "1673:7:47",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 17959,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 17957,
                        "name": "SimpleRestrictedFDTLogic",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17895,
                        "src": "1697:24:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_SimpleRestrictedFDTLogic_$17895_$",
                          "typeString": "type(library SimpleRestrictedFDTLogic)"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_type$_t_contract$_SimpleRestrictedFDTLogic_$17895_$",
                          "typeString": "type(library SimpleRestrictedFDTLogic)"
                        }
                      ],
                      "id": 17956,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "1689:7:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": {
                        "id": 17955,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "1689:7:47",
                        "typeDescriptions": {
                          "typeIdentifier": null,
                          "typeString": null
                        }
                      }
                    },
                    "id": 17958,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1689:33:47",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1673:49:47"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 17961,
                        "name": "name",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17940,
                        "src": "1742:4:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_calldata_ptr",
                          "typeString": "string calldata"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 17962,
                        "name": "symbol",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17942,
                        "src": "1748:6:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_calldata_ptr",
                          "typeString": "string calldata"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 17963,
                        "name": "initialSupply",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17944,
                        "src": "1756:13:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 17964,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17946,
                        "src": "1771:5:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$38235",
                          "typeString": "contract IERC20"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 17965,
                        "name": "owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17948,
                        "src": "1778:5:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 17966,
                        "name": "logic",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17954,
                        "src": "1785:5:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 17967,
                        "name": "salt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17950,
                        "src": "1792:4:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_string_calldata_ptr",
                          "typeString": "string calldata"
                        },
                        {
                          "typeIdentifier": "t_string_calldata_ptr",
                          "typeString": "string calldata"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_contract$_IERC20_$38235",
                          "typeString": "contract IERC20"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 17960,
                      "name": "createFDT",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18026,
                      "src": "1732:9:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_string_calldata_ptr_$_t_string_calldata_ptr_$_t_uint256_$_t_contract$_IERC20_$38235_$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (string calldata,string calldata,uint256,contract IERC20,address,address,uint256)"
                      }
                    },
                    "id": 17968,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1732:65:47",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 17969,
                  "nodeType": "ExpressionStatement",
                  "src": "1732:65:47"
                }
              ]
            },
            "documentation": null,
            "functionSelector": "84fb1604",
            "id": 17971,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "createRestrictedERC20Distributor",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 17951,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17940,
                  "mutability": "mutable",
                  "name": "name",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 17971,
                  "src": "1485:20:47",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_calldata_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 17939,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1485:6:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17942,
                  "mutability": "mutable",
                  "name": "symbol",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 17971,
                  "src": "1515:22:47",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_calldata_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 17941,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1515:6:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17944,
                  "mutability": "mutable",
                  "name": "initialSupply",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 17971,
                  "src": "1547:21:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 17943,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1547:7:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17946,
                  "mutability": "mutable",
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 17971,
                  "src": "1578:12:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20_$38235",
                    "typeString": "contract IERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 17945,
                    "name": "IERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 38235,
                    "src": "1578:6:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20_$38235",
                      "typeString": "contract IERC20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17948,
                  "mutability": "mutable",
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 17971,
                  "src": "1600:13:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 17947,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1600:7:47",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17950,
                  "mutability": "mutable",
                  "name": "salt",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 17971,
                  "src": "1623:12:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 17949,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1623:7:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1475:166:47"
            },
            "returnParameters": {
              "id": 17952,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1663:0:47"
            },
            "scope": 18027,
            "src": "1434:370:47",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 18025,
              "nodeType": "Block",
              "src": "2039:360:47",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 17997,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 17991,
                              "name": "token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 17979,
                              "src": "2078:5:47",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$38235",
                                "typeString": "contract IERC20"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_IERC20_$38235",
                                "typeString": "contract IERC20"
                              }
                            ],
                            "id": 17990,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "2070:7:47",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 17989,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "2070:7:47",
                              "typeDescriptions": {
                                "typeIdentifier": null,
                                "typeString": null
                              }
                            }
                          },
                          "id": 17992,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2070:14:47",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 17995,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2096:1:47",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 17994,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "2088:7:47",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 17993,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "2088:7:47",
                              "typeDescriptions": {
                                "typeIdentifier": null,
                                "typeString": null
                              }
                            }
                          },
                          "id": 17996,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2088:10:47",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "2070:28:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "464454466163746f72792e6372656174654644543a20494e56414c49445f46554e4354494f4e5f504152414d4554455253",
                        "id": 17998,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2112:51:47",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_56c912b6b44cc39f851e3882ba96e2a88a468101e95a9277a320e1078af714ae",
                          "typeString": "literal_string \"FDTFactory.createFDT: INVALID_FUNCTION_PARAMETERS\""
                        },
                        "value": "FDTFactory.createFDT: INVALID_FUNCTION_PARAMETERS"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_56c912b6b44cc39f851e3882ba96e2a88a468101e95a9277a320e1078af714ae",
                          "typeString": "literal_string \"FDTFactory.createFDT: INVALID_FUNCTION_PARAMETERS\""
                        }
                      ],
                      "id": 17988,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "2049:7:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 17999,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2049:124:47",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 18000,
                  "nodeType": "ExpressionStatement",
                  "src": "2049:124:47"
                },
                {
                  "assignments": [
                    18002
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 18002,
                      "mutability": "mutable",
                      "name": "distributor",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 18025,
                      "src": "2184:19:47",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 18001,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "2184:7:47",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 18007,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 18004,
                        "name": "logic",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17983,
                        "src": "2226:5:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18005,
                        "name": "salt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17985,
                        "src": "2233:4:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 18003,
                      "name": "create2Eip1167Proxy",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 22444,
                      "src": "2206:19:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_address_$",
                        "typeString": "function (address,uint256) returns (address)"
                      }
                    },
                    "id": 18006,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2206:32:47",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2184:54:47"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 18012,
                        "name": "name",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17973,
                        "src": "2290:4:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_calldata_ptr",
                          "typeString": "string calldata"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18013,
                        "name": "symbol",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17975,
                        "src": "2296:6:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_calldata_ptr",
                          "typeString": "string calldata"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18014,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17979,
                        "src": "2304:5:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$38235",
                          "typeString": "contract IERC20"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18015,
                        "name": "owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17981,
                        "src": "2311:5:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18016,
                        "name": "initialSupply",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17977,
                        "src": "2318:13:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_string_calldata_ptr",
                          "typeString": "string calldata"
                        },
                        {
                          "typeIdentifier": "t_string_calldata_ptr",
                          "typeString": "string calldata"
                        },
                        {
                          "typeIdentifier": "t_contract$_IERC20_$38235",
                          "typeString": "contract IERC20"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 18009,
                            "name": "distributor",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18002,
                            "src": "2266:11:47",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 18008,
                          "name": "IInitializableFDT",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 18361,
                          "src": "2248:17:47",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_IInitializableFDT_$18361_$",
                            "typeString": "type(contract IInitializableFDT)"
                          }
                        },
                        "id": 18010,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2248:30:47",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IInitializableFDT_$18361",
                          "typeString": "contract IInitializableFDT"
                        }
                      },
                      "id": 18011,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "initialize",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 18360,
                      "src": "2248:41:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_string_memory_ptr_$_t_string_memory_ptr_$_t_contract$_IERC20_$38235_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (string memory,string memory,contract IERC20,address,uint256) external"
                      }
                    },
                    "id": 18017,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2248:84:47",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 18018,
                  "nodeType": "ExpressionStatement",
                  "src": "2248:84:47"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 18020,
                        "name": "distributor",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18002,
                        "src": "2368:11:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 18021,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "2381:3:47",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 18022,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "2381:10:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 18019,
                      "name": "DeployedDistributor",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 17904,
                      "src": "2348:19:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$",
                        "typeString": "function (address,address)"
                      }
                    },
                    "id": 18023,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2348:44:47",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 18024,
                  "nodeType": "EmitStatement",
                  "src": "2343:49:47"
                }
              ]
            },
            "documentation": null,
            "id": 18026,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "createFDT",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 17986,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17973,
                  "mutability": "mutable",
                  "name": "name",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 18026,
                  "src": "1838:20:47",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_calldata_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 17972,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1838:6:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17975,
                  "mutability": "mutable",
                  "name": "symbol",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 18026,
                  "src": "1868:22:47",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_calldata_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 17974,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1868:6:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17977,
                  "mutability": "mutable",
                  "name": "initialSupply",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 18026,
                  "src": "1900:21:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 17976,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1900:7:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17979,
                  "mutability": "mutable",
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 18026,
                  "src": "1931:12:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20_$38235",
                    "typeString": "contract IERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 17978,
                    "name": "IERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 38235,
                    "src": "1931:6:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20_$38235",
                      "typeString": "contract IERC20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17981,
                  "mutability": "mutable",
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 18026,
                  "src": "1953:13:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 17980,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1953:7:47",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17983,
                  "mutability": "mutable",
                  "name": "logic",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 18026,
                  "src": "1976:13:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 17982,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1976:7:47",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17985,
                  "mutability": "mutable",
                  "name": "salt",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 18026,
                  "src": "1999:12:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 17984,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1999:7:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1828:189:47"
            },
            "returnParameters": {
              "id": 17987,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2039:0:47"
            },
            "scope": 18027,
            "src": "1810:589:47",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          }
        ],
        "scope": 18028,
        "src": "662:1739:47"
      }
    ],
    "src": "41:2361:47"
  },
  "legacyAST": {
    "absolutePath": "/Users/johannes/Documents/dev/actus-protocol/ap-monorepo/packages/ap-contracts/contracts/FDT/FDTFactory.sol",
    "exportedSymbols": {
      "FDTFactory": [
        18027
      ],
      "SimpleRestrictedFDTLogic": [
        17895
      ],
      "VanillaFDTLogic": [
        17886
      ]
    },
    "id": 18028,
    "license": "Apache-2.0",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 17873,
        "literals": [
          "solidity",
          "^",
          "0.6",
          ".11"
        ],
        "nodeType": "PragmaDirective",
        "src": "41:24:47"
      },
      {
        "id": 17874,
        "literals": [
          "experimental",
          "ABIEncoderV2"
        ],
        "nodeType": "PragmaDirective",
        "src": "66:33:47"
      },
      {
        "absolutePath": "@openzeppelin/contracts-ethereum-package/contracts/token/ERC20/IERC20.sol",
        "file": "@openzeppelin/contracts-ethereum-package/contracts/token/ERC20/IERC20.sol",
        "id": 17875,
        "nodeType": "ImportDirective",
        "scope": 18028,
        "sourceUnit": 38236,
        "src": "101:83:47",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/johannes/Documents/dev/actus-protocol/ap-monorepo/packages/ap-contracts/contracts/FDT/IInitializableFDT.sol",
        "file": "./IInitializableFDT.sol",
        "id": 17876,
        "nodeType": "ImportDirective",
        "scope": 18028,
        "sourceUnit": 18362,
        "src": "185:33:47",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/johannes/Documents/dev/actus-protocol/ap-monorepo/packages/ap-contracts/contracts/proxy/ProxyFactory.sol",
        "file": "../proxy/ProxyFactory.sol",
        "id": 17877,
        "nodeType": "ImportDirective",
        "scope": 18028,
        "sourceUnit": 22446,
        "src": "219:35:47",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "library",
        "documentation": null,
        "fullyImplemented": true,
        "id": 17886,
        "linearizedBaseContracts": [
          17886
        ],
        "name": "VanillaFDTLogic",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": {
              "id": 17884,
              "nodeType": "Block",
              "src": "378:30:47",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "6e65766572206465706c6f79206974",
                        "id": 17881,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "387:17:47",
                        "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": 17880,
                      "name": "revert",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -19,
                        -19
                      ],
                      "referencedDeclaration": -19,
                      "src": "380:6:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (string memory) pure"
                      }
                    },
                    "id": 17882,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "380:25:47",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 17883,
                  "nodeType": "ExpressionStatement",
                  "src": "380:25:47"
                }
              ]
            },
            "documentation": null,
            "functionSelector": "b7ba4583",
            "id": 17885,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 17878,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "363:2:47"
            },
            "returnParameters": {
              "id": 17879,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "378:0:47"
            },
            "scope": 17886,
            "src": "353:55:47",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "public"
          }
        ],
        "scope": 18028,
        "src": "323:87:47"
      },
      {
        "abstract": false,
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "library",
        "documentation": null,
        "fullyImplemented": true,
        "id": 17895,
        "linearizedBaseContracts": [
          17895
        ],
        "name": "SimpleRestrictedFDTLogic",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": {
              "id": 17893,
              "nodeType": "Block",
              "src": "552:30:47",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "6e65766572206465706c6f79206974",
                        "id": 17890,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "561:17:47",
                        "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": 17889,
                      "name": "revert",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -19,
                        -19
                      ],
                      "referencedDeclaration": -19,
                      "src": "554:6:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (string memory) pure"
                      }
                    },
                    "id": 17891,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "554:25:47",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 17892,
                  "nodeType": "ExpressionStatement",
                  "src": "554:25:47"
                }
              ]
            },
            "documentation": null,
            "functionSelector": "b7ba4583",
            "id": 17894,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 17887,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "537:2:47"
            },
            "returnParameters": {
              "id": 17888,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "552:0:47"
            },
            "scope": 17895,
            "src": "527:55:47",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "public"
          }
        ],
        "scope": 18028,
        "src": "488:96:47"
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 17897,
              "name": "ProxyFactory",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 22445,
              "src": "685:12:47",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ProxyFactory_$22445",
                "typeString": "contract ProxyFactory"
              }
            },
            "id": 17898,
            "nodeType": "InheritanceSpecifier",
            "src": "685:12:47"
          }
        ],
        "contractDependencies": [
          22445
        ],
        "contractKind": "contract",
        "documentation": {
          "id": 17896,
          "nodeType": "StructuredDocumentation",
          "src": "586:75:47",
          "text": " @title FDTFactory\n @notice Factory for deploying FDT contracts"
        },
        "fullyImplemented": true,
        "id": 18027,
        "linearizedBaseContracts": [
          18027,
          22445
        ],
        "name": "FDTFactory",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "anonymous": false,
            "documentation": null,
            "id": 17904,
            "name": "DeployedDistributor",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 17903,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17900,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "distributor",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 17904,
                  "src": "731:19:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 17899,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "731:7:47",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17902,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "creator",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 17904,
                  "src": "752:15:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 17901,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "752:7:47",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "730:38:47"
            },
            "src": "705:64:47"
          },
          {
            "body": {
              "id": 17937,
              "nodeType": "Block",
              "src": "1296:132:47",
              "statements": [
                {
                  "assignments": [
                    17921
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 17921,
                      "mutability": "mutable",
                      "name": "logic",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 17937,
                      "src": "1306:13:47",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 17920,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "1306:7:47",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 17926,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 17924,
                        "name": "VanillaFDTLogic",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17886,
                        "src": "1330:15:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_VanillaFDTLogic_$17886_$",
                          "typeString": "type(library VanillaFDTLogic)"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_type$_t_contract$_VanillaFDTLogic_$17886_$",
                          "typeString": "type(library VanillaFDTLogic)"
                        }
                      ],
                      "id": 17923,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "1322:7:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": {
                        "id": 17922,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "1322:7:47",
                        "typeDescriptions": {
                          "typeIdentifier": null,
                          "typeString": null
                        }
                      }
                    },
                    "id": 17925,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1322:24:47",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1306:40:47"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 17928,
                        "name": "name",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17907,
                        "src": "1366:4:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_calldata_ptr",
                          "typeString": "string calldata"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 17929,
                        "name": "symbol",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17909,
                        "src": "1372:6:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_calldata_ptr",
                          "typeString": "string calldata"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 17930,
                        "name": "initialSupply",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17911,
                        "src": "1380:13:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 17931,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17913,
                        "src": "1395:5:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$38235",
                          "typeString": "contract IERC20"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 17932,
                        "name": "owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17915,
                        "src": "1402:5:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 17933,
                        "name": "logic",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17921,
                        "src": "1409:5:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 17934,
                        "name": "salt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17917,
                        "src": "1416:4:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_string_calldata_ptr",
                          "typeString": "string calldata"
                        },
                        {
                          "typeIdentifier": "t_string_calldata_ptr",
                          "typeString": "string calldata"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_contract$_IERC20_$38235",
                          "typeString": "contract IERC20"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 17927,
                      "name": "createFDT",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18026,
                      "src": "1356:9:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_string_calldata_ptr_$_t_string_calldata_ptr_$_t_uint256_$_t_contract$_IERC20_$38235_$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (string calldata,string calldata,uint256,contract IERC20,address,address,uint256)"
                      }
                    },
                    "id": 17935,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1356:65:47",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 17936,
                  "nodeType": "ExpressionStatement",
                  "src": "1356:65:47"
                }
              ]
            },
            "documentation": {
              "id": 17905,
              "nodeType": "StructuredDocumentation",
              "src": "776:296:47",
              "text": " deploys a new tokenized distributor contract for a specified ERC20 token\n @dev mints initial supply after deploying the tokenized distributor contract\n @param name name of the token\n @param symbol of the token\n @param initialSupply of distributor tokens"
            },
            "functionSelector": "4a666025",
            "id": 17938,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "createERC20Distributor",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 17918,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17907,
                  "mutability": "mutable",
                  "name": "name",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 17938,
                  "src": "1118:20:47",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_calldata_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 17906,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1118:6:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17909,
                  "mutability": "mutable",
                  "name": "symbol",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 17938,
                  "src": "1148:22:47",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_calldata_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 17908,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1148:6:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17911,
                  "mutability": "mutable",
                  "name": "initialSupply",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 17938,
                  "src": "1180:21:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 17910,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1180:7:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17913,
                  "mutability": "mutable",
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 17938,
                  "src": "1211:12:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20_$38235",
                    "typeString": "contract IERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 17912,
                    "name": "IERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 38235,
                    "src": "1211:6:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20_$38235",
                      "typeString": "contract IERC20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17915,
                  "mutability": "mutable",
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 17938,
                  "src": "1233:13:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 17914,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1233:7:47",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17917,
                  "mutability": "mutable",
                  "name": "salt",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 17938,
                  "src": "1256:12:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 17916,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1256:7:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1108:166:47"
            },
            "returnParameters": {
              "id": 17919,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1296:0:47"
            },
            "scope": 18027,
            "src": "1077:351:47",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 17970,
              "nodeType": "Block",
              "src": "1663:141:47",
              "statements": [
                {
                  "assignments": [
                    17954
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 17954,
                      "mutability": "mutable",
                      "name": "logic",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 17970,
                      "src": "1673:13:47",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 17953,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "1673:7:47",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 17959,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 17957,
                        "name": "SimpleRestrictedFDTLogic",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17895,
                        "src": "1697:24:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_SimpleRestrictedFDTLogic_$17895_$",
                          "typeString": "type(library SimpleRestrictedFDTLogic)"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_type$_t_contract$_SimpleRestrictedFDTLogic_$17895_$",
                          "typeString": "type(library SimpleRestrictedFDTLogic)"
                        }
                      ],
                      "id": 17956,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "1689:7:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": {
                        "id": 17955,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "1689:7:47",
                        "typeDescriptions": {
                          "typeIdentifier": null,
                          "typeString": null
                        }
                      }
                    },
                    "id": 17958,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1689:33:47",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1673:49:47"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 17961,
                        "name": "name",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17940,
                        "src": "1742:4:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_calldata_ptr",
                          "typeString": "string calldata"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 17962,
                        "name": "symbol",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17942,
                        "src": "1748:6:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_calldata_ptr",
                          "typeString": "string calldata"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 17963,
                        "name": "initialSupply",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17944,
                        "src": "1756:13:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 17964,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17946,
                        "src": "1771:5:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$38235",
                          "typeString": "contract IERC20"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 17965,
                        "name": "owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17948,
                        "src": "1778:5:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 17966,
                        "name": "logic",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17954,
                        "src": "1785:5:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 17967,
                        "name": "salt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17950,
                        "src": "1792:4:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_string_calldata_ptr",
                          "typeString": "string calldata"
                        },
                        {
                          "typeIdentifier": "t_string_calldata_ptr",
                          "typeString": "string calldata"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_contract$_IERC20_$38235",
                          "typeString": "contract IERC20"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 17960,
                      "name": "createFDT",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18026,
                      "src": "1732:9:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_string_calldata_ptr_$_t_string_calldata_ptr_$_t_uint256_$_t_contract$_IERC20_$38235_$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (string calldata,string calldata,uint256,contract IERC20,address,address,uint256)"
                      }
                    },
                    "id": 17968,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1732:65:47",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 17969,
                  "nodeType": "ExpressionStatement",
                  "src": "1732:65:47"
                }
              ]
            },
            "documentation": null,
            "functionSelector": "84fb1604",
            "id": 17971,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "createRestrictedERC20Distributor",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 17951,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17940,
                  "mutability": "mutable",
                  "name": "name",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 17971,
                  "src": "1485:20:47",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_calldata_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 17939,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1485:6:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17942,
                  "mutability": "mutable",
                  "name": "symbol",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 17971,
                  "src": "1515:22:47",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_calldata_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 17941,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1515:6:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17944,
                  "mutability": "mutable",
                  "name": "initialSupply",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 17971,
                  "src": "1547:21:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 17943,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1547:7:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17946,
                  "mutability": "mutable",
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 17971,
                  "src": "1578:12:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20_$38235",
                    "typeString": "contract IERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 17945,
                    "name": "IERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 38235,
                    "src": "1578:6:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20_$38235",
                      "typeString": "contract IERC20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17948,
                  "mutability": "mutable",
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 17971,
                  "src": "1600:13:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 17947,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1600:7:47",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17950,
                  "mutability": "mutable",
                  "name": "salt",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 17971,
                  "src": "1623:12:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 17949,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1623:7:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1475:166:47"
            },
            "returnParameters": {
              "id": 17952,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1663:0:47"
            },
            "scope": 18027,
            "src": "1434:370:47",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 18025,
              "nodeType": "Block",
              "src": "2039:360:47",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 17997,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 17991,
                              "name": "token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 17979,
                              "src": "2078:5:47",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$38235",
                                "typeString": "contract IERC20"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_IERC20_$38235",
                                "typeString": "contract IERC20"
                              }
                            ],
                            "id": 17990,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "2070:7:47",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 17989,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "2070:7:47",
                              "typeDescriptions": {
                                "typeIdentifier": null,
                                "typeString": null
                              }
                            }
                          },
                          "id": 17992,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2070:14:47",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 17995,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2096:1:47",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 17994,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "2088:7:47",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 17993,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "2088:7:47",
                              "typeDescriptions": {
                                "typeIdentifier": null,
                                "typeString": null
                              }
                            }
                          },
                          "id": 17996,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2088:10:47",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "2070:28:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "464454466163746f72792e6372656174654644543a20494e56414c49445f46554e4354494f4e5f504152414d4554455253",
                        "id": 17998,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2112:51:47",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_56c912b6b44cc39f851e3882ba96e2a88a468101e95a9277a320e1078af714ae",
                          "typeString": "literal_string \"FDTFactory.createFDT: INVALID_FUNCTION_PARAMETERS\""
                        },
                        "value": "FDTFactory.createFDT: INVALID_FUNCTION_PARAMETERS"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_56c912b6b44cc39f851e3882ba96e2a88a468101e95a9277a320e1078af714ae",
                          "typeString": "literal_string \"FDTFactory.createFDT: INVALID_FUNCTION_PARAMETERS\""
                        }
                      ],
                      "id": 17988,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "2049:7:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 17999,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2049:124:47",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 18000,
                  "nodeType": "ExpressionStatement",
                  "src": "2049:124:47"
                },
                {
                  "assignments": [
                    18002
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 18002,
                      "mutability": "mutable",
                      "name": "distributor",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 18025,
                      "src": "2184:19:47",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 18001,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "2184:7:47",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 18007,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 18004,
                        "name": "logic",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17983,
                        "src": "2226:5:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18005,
                        "name": "salt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17985,
                        "src": "2233:4:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 18003,
                      "name": "create2Eip1167Proxy",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 22444,
                      "src": "2206:19:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_address_$",
                        "typeString": "function (address,uint256) returns (address)"
                      }
                    },
                    "id": 18006,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2206:32:47",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2184:54:47"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 18012,
                        "name": "name",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17973,
                        "src": "2290:4:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_calldata_ptr",
                          "typeString": "string calldata"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18013,
                        "name": "symbol",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17975,
                        "src": "2296:6:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_calldata_ptr",
                          "typeString": "string calldata"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18014,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17979,
                        "src": "2304:5:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$38235",
                          "typeString": "contract IERC20"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18015,
                        "name": "owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17981,
                        "src": "2311:5:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18016,
                        "name": "initialSupply",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17977,
                        "src": "2318:13:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_string_calldata_ptr",
                          "typeString": "string calldata"
                        },
                        {
                          "typeIdentifier": "t_string_calldata_ptr",
                          "typeString": "string calldata"
                        },
                        {
                          "typeIdentifier": "t_contract$_IERC20_$38235",
                          "typeString": "contract IERC20"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 18009,
                            "name": "distributor",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18002,
                            "src": "2266:11:47",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 18008,
                          "name": "IInitializableFDT",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 18361,
                          "src": "2248:17:47",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_IInitializableFDT_$18361_$",
                            "typeString": "type(contract IInitializableFDT)"
                          }
                        },
                        "id": 18010,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2248:30:47",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IInitializableFDT_$18361",
                          "typeString": "contract IInitializableFDT"
                        }
                      },
                      "id": 18011,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "initialize",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 18360,
                      "src": "2248:41:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_string_memory_ptr_$_t_string_memory_ptr_$_t_contract$_IERC20_$38235_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (string memory,string memory,contract IERC20,address,uint256) external"
                      }
                    },
                    "id": 18017,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2248:84:47",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 18018,
                  "nodeType": "ExpressionStatement",
                  "src": "2248:84:47"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 18020,
                        "name": "distributor",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18002,
                        "src": "2368:11:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 18021,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "2381:3:47",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 18022,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "2381:10:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 18019,
                      "name": "DeployedDistributor",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 17904,
                      "src": "2348:19:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$",
                        "typeString": "function (address,address)"
                      }
                    },
                    "id": 18023,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2348:44:47",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 18024,
                  "nodeType": "EmitStatement",
                  "src": "2343:49:47"
                }
              ]
            },
            "documentation": null,
            "id": 18026,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "createFDT",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 17986,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17973,
                  "mutability": "mutable",
                  "name": "name",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 18026,
                  "src": "1838:20:47",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_calldata_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 17972,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1838:6:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17975,
                  "mutability": "mutable",
                  "name": "symbol",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 18026,
                  "src": "1868:22:47",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_calldata_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 17974,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1868:6:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17977,
                  "mutability": "mutable",
                  "name": "initialSupply",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 18026,
                  "src": "1900:21:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 17976,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1900:7:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17979,
                  "mutability": "mutable",
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 18026,
                  "src": "1931:12:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20_$38235",
                    "typeString": "contract IERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 17978,
                    "name": "IERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 38235,
                    "src": "1931:6:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20_$38235",
                      "typeString": "contract IERC20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17981,
                  "mutability": "mutable",
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 18026,
                  "src": "1953:13:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 17980,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1953:7:47",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17983,
                  "mutability": "mutable",
                  "name": "logic",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 18026,
                  "src": "1976:13:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 17982,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1976:7:47",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17985,
                  "mutability": "mutable",
                  "name": "salt",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 18026,
                  "src": "1999:12:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 17984,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1999:7:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1828:189:47"
            },
            "returnParameters": {
              "id": 17987,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2039:0:47"
            },
            "scope": 18027,
            "src": "1810:589:47",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          }
        ],
        "scope": 18028,
        "src": "662:1739:47"
      }
    ],
    "src": "41:2361:47"
  },
  "compiler": {
    "name": "solc",
    "version": "0.6.11+commit.5ef660b1.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.2.0",
  "updatedAt": "2020-08-12T09:47:18.073Z",
  "devdoc": {
    "kind": "dev",
    "methods": {},
    "version": 1
  },
  "userdoc": {
    "kind": "user",
    "methods": {},
    "version": 1
  }
}