{
  "contractName": "GeneralPermissionManagerFactory",
  "abi": [
    {
      "constant": true,
      "inputs": [],
      "name": "monthlySubscriptionCost",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_newSubscriptionCost",
          "type": "uint256"
        }
      ],
      "name": "changeFactorySubscriptionFee",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_newSetupCost",
          "type": "uint256"
        }
      ],
      "name": "changeFactorySetupFee",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "polyToken",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "setupCost",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_newUsageCost",
          "type": "uint256"
        }
      ],
      "name": "changeFactoryUsageFee",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "usageCost",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "name": "_polyAddress",
          "type": "address"
        },
        {
          "name": "_setupCost",
          "type": "uint256"
        },
        {
          "name": "_usageCost",
          "type": "uint256"
        },
        {
          "name": "_subscriptionCost",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "name": "_oldSetupcost",
          "type": "uint256"
        },
        {
          "indexed": false,
          "name": "_newSetupCost",
          "type": "uint256"
        },
        {
          "indexed": false,
          "name": "_moduleFactory",
          "type": "address"
        }
      ],
      "name": "LogChangeFactorySetupFee",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "name": "_oldUsageCost",
          "type": "uint256"
        },
        {
          "indexed": false,
          "name": "_newUsageCost",
          "type": "uint256"
        },
        {
          "indexed": false,
          "name": "_moduleFactory",
          "type": "address"
        }
      ],
      "name": "LogChangeFactoryUsageFee",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "name": "_oldSubscriptionCost",
          "type": "uint256"
        },
        {
          "indexed": false,
          "name": "_newMonthlySubscriptionCost",
          "type": "uint256"
        },
        {
          "indexed": false,
          "name": "_moduleFactory",
          "type": "address"
        }
      ],
      "name": "LogChangeFactorySubscriptionFee",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "name": "_module",
          "type": "address"
        },
        {
          "indexed": true,
          "name": "_moduleName",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "name": "_moduleFactory",
          "type": "address"
        },
        {
          "indexed": false,
          "name": "_creator",
          "type": "address"
        },
        {
          "indexed": false,
          "name": "_timestamp",
          "type": "uint256"
        }
      ],
      "name": "LogGenerateModuleFromFactory",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "previousOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipRenounced",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "",
          "type": "bytes"
        }
      ],
      "name": "deploy",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getType",
      "outputs": [
        {
          "name": "",
          "type": "uint8"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getName",
      "outputs": [
        {
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getDescription",
      "outputs": [
        {
          "name": "",
          "type": "string"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getTitle",
      "outputs": [
        {
          "name": "",
          "type": "string"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getInstructions",
      "outputs": [
        {
          "name": "",
          "type": "string"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getTags",
      "outputs": [
        {
          "name": "",
          "type": "bytes32[]"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": "0x608060405234801561001057600080fd5b506040516080806117e1833981016040908152815160208301519183015160609093015160008054600160a060020a0319908116331790915560018054600160a060020a039094169390911692909217909155600291909155600391909155600455611760806100816000396000f3006080604052600436106100ef5763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166277436081146100f457806306184a251461013057806315dae03e1461015757806317d7de7c146101825780631a092541146101975780633ae192bd1461022157806358a191c31461023b5780636faa22a514610253578063715018a6146102685780637e363ffa1461027d5780638da5cb5b14610292578063995d9ab7146102a7578063aac67b051461030c578063d54c472614610324578063e0d5497014610339578063f2fde38b1461034e578063ff3c1a8f1461036f575b600080fd5b34801561010057600080fd5b506101146004803560248101910135610384565b60408051600160a060020a039092168252519081900360200190f35b34801561013c57600080fd5b50610145610599565b60408051918252519081900360200190f35b34801561016357600080fd5b5061016c61059f565b6040805160ff9092168252519081900360200190f35b34801561018e57600080fd5b506101456105a4565b3480156101a357600080fd5b506101ac6105c8565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101e65781810151838201526020016101ce565b50505050905090810190601f1680156102135780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561022d57600080fd5b5061023960043561064d565b005b34801561024757600080fd5b506102396004356106aa565b34801561025f57600080fd5b50610114610707565b34801561027457600080fd5b50610239610716565b34801561028957600080fd5b50610145610782565b34801561029e57600080fd5b50610114610788565b3480156102b357600080fd5b506102bc610797565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156102f85781810151838201526020016102e0565b505050509050019250505060405180910390f35b34801561031857600080fd5b506102396004356107a9565b34801561033057600080fd5b50610145610806565b34801561034557600080fd5b506101ac61080c565b34801561035a57600080fd5b50610239600160a060020a036004351661082e565b34801561037b57600080fd5b506101ac610851565b600080600060025411156104f65760015460008054600254604080517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152600160a060020a03938416602482015260448101929092525191909316926323b872dd9260648083019360209390929083900390910190829087803b15801561041157600080fd5b505af1158015610425573d6000803e3d6000fd5b505050506040513d602081101561043b57600080fd5b505115156104f657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f4661696c6564207472616e7366657246726f6d2062656361757365206f66207360448201527f7566666963656e7420416c6c6f77616e6365206973206e6f742070726f76696460648201527f6564000000000000000000000000000000000000000000000000000000000000608482015290519081900360a40190fd5b6001543390600160a060020a031661050c610905565b600160a060020a03928316815291166020820152604080519182900301906000f08015801561053f573d6000803e3d6000fd5b5090503061054b6105a4565b60408051600160a060020a0385168152336020820152428183015290517f1b81ebef84f1d2411caa47894fb587822eff7c2a8a3580a2d52ce516f840c8219181900360600190a39392505050565b60045481565b600190565b7f47656e6572616c5065726d697373696f6e4d616e61676572000000000000000090565b60408051608081018252604181527f4d616e616765207065726d697373696f6e732077697468696e2074686520536560208201527f63757269747920546f6b656e20616e64206174746163686564206d6f64756c65918101919091527f7300000000000000000000000000000000000000000000000000000000000000606082015290565b600054600160a060020a0316331461066457600080fd5b60045460408051918252602082018390523082820152517fc15ef5ae01a170635c048bc2ddb0e834fe5d866424709f0a7398496a80852ec89181900360600190a1600455565b600054600160a060020a031633146106c157600080fd5b60025460408051918252602082018390523082820152517ff9c53ed8f7f318ac63991d13acab4cf653984ce56b7dc1b3a2083af3f412262d9181900360600190a1600255565b600154600160a060020a031681565b600054600160a060020a0316331461072d57600080fd5b60008054604051600160a060020a03909116917ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482091a26000805473ffffffffffffffffffffffffffffffffffffffff19169055565b60025481565b600054600160a060020a031681565b60408051600081526020810190915290565b600054600160a060020a031633146107c057600080fd5b60035460408051918252602082018390523082820152517fff5bf6a8d25c4e30ad5778be1e2a41c7c45173313279bcbba6e2bb1b1bf7a6db9181900360600190a1600355565b60035481565b60606101006040519081016040528060d7815260200161165e60d79139905090565b600054600160a060020a0316331461084557600080fd5b61084e81610888565b50565b60408051808201909152601a81527f47656e6572616c205065726d697373696f6e204d616e61676572000000000000602082015290565b600160a060020a038116151561089d57600080fd5b60008054604051600160a060020a03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b604051610d4880610916833901905600608060405234801561001057600080fd5b50604051604080610d4883398101604052805160209091015160018054600160a060020a03938416600160a060020a0319918216179091556000805482163317905560028054939092169216919091179055610cd7806100716000396000f3006080604052600436106100b65763ffffffff60e060020a6000350416631613ec9d81146100bb5780634e0a4792146101055780635e1758fa146101435780635f7619a4146101695780636c5aaf50146101815780636faa22a5146101b45780637922c08a146101e55780638658b8b9146101fa578063b84dfbd214610224578063c3a07df614610239578063c45a01551461029e578063d70afa96146102b3578063dec7542f146102c8578063e380d343146102f7575b600080fd5b3480156100c757600080fd5b506100d0610318565b604080517fffffffff000000000000000000000000000000000000000000000000000000009092168252519081900360200190f35b34801561011157600080fd5b5061012f600160a060020a036004358116906024351660443561031d565b604080519115158252519081900360200190f35b34801561014f57600080fd5b50610167600160a060020a0360043516602435610343565b005b34801561017557600080fd5b5061012f600435610551565b34801561018d57600080fd5b506101a2600160a060020a0360043516610890565b60408051918252519081900360200190f35b3480156101c057600080fd5b506101c96108ab565b60408051600160a060020a039092168252519081900360200190f35b3480156101f157600080fd5b506101a26108ba565b34801561020657600080fd5b5061012f600160a060020a03600435811690602435166044356108cc565b34801561023057600080fd5b506101c961092c565b34801561024557600080fd5b5061024e61093b565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561028a578181015183820152602001610272565b505050509050019250505060405180910390f35b3480156102aa57600080fd5b506101c961098d565b3480156102bf57600080fd5b506101a261099c565b3480156102d457600080fd5b5061012f600160a060020a036004358116906024351660443560643515156109c0565b34801561030357600080fd5b506101a2600160a060020a0360043516610c79565b600090565b600360209081526000938452604080852082529284528284209052825290205460ff1681565b600080516020610c8c833981519152600080600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156103a857600080fd5b505af11580156103bc573d6000803e3d6000fd5b505050506040513d60208110156103d257600080fd5b505160005433600160a060020a0392831681149450911614905081806103f55750805b8061049b5750600154604080517f8658b8b9000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018690529051600160a060020a0390921691638658b8b9916064808201926020929091908290030181600087803b15801561046e57600080fd5b505af1158015610482573d6000803e3d6000fd5b505050506040513d602081101561049857600080fd5b50515b15156104f1576040805160e560020a62461bcd02815260206004820152601760248201527f5065726d697373696f6e20636865636b206661696c6564000000000000000000604482015290519081900360640190fd5b600160a060020a038516600081815260046020908152604091829020879055815192835282018690524282820152517f7606544330055376fae1759a3d70de906caf98b81dc3bf7f2582af2ffcd4cfb49181900360600190a15050505050565b60007f4645455f41444d494e0000000000000000000000000000000000000000000000600080600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156105ca57600080fd5b505af11580156105de573d6000803e3d6000fd5b505050506040513d60208110156105f457600080fd5b505160005433600160a060020a0392831681149450911614905081806106175750805b806106bd5750600154604080517f8658b8b9000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018690529051600160a060020a0390921691638658b8b9916064808201926020929091908290030181600087803b15801561069057600080fd5b505af11580156106a4573d6000803e3d6000fd5b505050506040513d60208110156106ba57600080fd5b50515b1515610713576040805160e560020a62461bcd02815260206004820152601760248201527f5065726d697373696f6e20636865636b206661696c6564000000000000000000604482015290519081900360640190fd5b60025460008054604080517f8da5cb5b0000000000000000000000000000000000000000000000000000000081529051600160a060020a03948516946323b872dd94309490911692638da5cb5b9260048083019360209383900390910190829087803b15801561078257600080fd5b505af1158015610796573d6000803e3d6000fd5b505050506040513d60208110156107ac57600080fd5b50516040805160e060020a63ffffffff8616028152600160a060020a039384166004820152929091166024830152604482018990525160648083019260209291908290030181600087803b15801561080357600080fd5b505af1158015610817573d6000803e3d6000fd5b505050506040513d602081101561082d57600080fd5b50511515610885576040805160e560020a62461bcd02815260206004820152601260248201527f556e61626c6520746f2074616b65206665650000000000000000000000000000604482015290519081900360640190fd5b506001949350505050565b600160a060020a031660009081526004602052604090205490565b600254600160a060020a031681565b600080516020610c8c83398151915281565b600160a060020a038316600090815260046020526040812054156109215750600160a060020a03808316600090815260036020908152604080832093871683529281528282208483529052205460ff16610925565b5060005b9392505050565b600154600160a060020a031681565b60408051600180825281830190925260609182919060208083019080388339019050509050600080516020610c8c83398151915281600081518110151561097e57fe5b60209081029091010152905090565b600054600160a060020a031681565b7f4645455f41444d494e000000000000000000000000000000000000000000000081565b6000600080516020610c8c833981519152600080600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015610a2757600080fd5b505af1158015610a3b573d6000803e3d6000fd5b505050506040513d6020811015610a5157600080fd5b505160005433600160a060020a039283168114945091161490508180610a745750805b80610b1a5750600154604080517f8658b8b9000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018690529051600160a060020a0390921691638658b8b9916064808201926020929091908290030181600087803b158015610aed57600080fd5b505af1158015610b01573d6000803e3d6000fd5b505050506040513d6020811015610b1757600080fd5b50515b1515610b70576040805160e560020a62461bcd02815260206004820152601760248201527f5065726d697373696f6e20636865636b206661696c6564000000000000000000604482015290519081900360640190fd5b600160a060020a0388166000908152600460205260409020541515610bdf576040805160e560020a62461bcd02815260206004820152601860248201527f44656c65676174652064657461696c73206e6f74207365740000000000000000604482015290519081900360640190fd5b600160a060020a038088166000818152600360209081526040808320948d168084529482528083208b845282529182902080548a151560ff1990911681179091558251948552908401929092528281018990526060830191909152426080830152517fe7e0f6463adc815ed8a33c10555a87bdef40d69beb9fdd7e4e3e783c35bf958c9181900360a00190a1506001979650505050505050565b6004602052600090815260409020548156004348414e47455f5045524d495353494f4e000000000000000000000000000000a165627a7a72305820c3cab0fcbbc22bd687d85331cd53fa43ff15c3a2b42a466136954a3b1c7617d4002941646420616e642072656d6f7665207065726d697373696f6e7320666f7220746865205365637572697479546f6b656e20616e64206173736f636961746564206d6f64756c65732e205065726d697373696f6e2074797065732073686f756c6420626520656e636f64656420617320627974657333322076616c7565732c20616e64206174746163686564207573696e672074686520776974685065726d206d6f64696669657220746f2072656c6576616e742066756e6374696f6e732e4e6f20696e697446756e6374696f6e2072657175697265642ea165627a7a7230582054922e2a8749807a0e2fff92052854c7ca99549dfdb49e63f38ac2f5e677487b0029",
  "deployedBytecode": "0x6080604052600436106100ef5763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166277436081146100f457806306184a251461013057806315dae03e1461015757806317d7de7c146101825780631a092541146101975780633ae192bd1461022157806358a191c31461023b5780636faa22a514610253578063715018a6146102685780637e363ffa1461027d5780638da5cb5b14610292578063995d9ab7146102a7578063aac67b051461030c578063d54c472614610324578063e0d5497014610339578063f2fde38b1461034e578063ff3c1a8f1461036f575b600080fd5b34801561010057600080fd5b506101146004803560248101910135610384565b60408051600160a060020a039092168252519081900360200190f35b34801561013c57600080fd5b50610145610599565b60408051918252519081900360200190f35b34801561016357600080fd5b5061016c61059f565b6040805160ff9092168252519081900360200190f35b34801561018e57600080fd5b506101456105a4565b3480156101a357600080fd5b506101ac6105c8565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101e65781810151838201526020016101ce565b50505050905090810190601f1680156102135780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561022d57600080fd5b5061023960043561064d565b005b34801561024757600080fd5b506102396004356106aa565b34801561025f57600080fd5b50610114610707565b34801561027457600080fd5b50610239610716565b34801561028957600080fd5b50610145610782565b34801561029e57600080fd5b50610114610788565b3480156102b357600080fd5b506102bc610797565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156102f85781810151838201526020016102e0565b505050509050019250505060405180910390f35b34801561031857600080fd5b506102396004356107a9565b34801561033057600080fd5b50610145610806565b34801561034557600080fd5b506101ac61080c565b34801561035a57600080fd5b50610239600160a060020a036004351661082e565b34801561037b57600080fd5b506101ac610851565b600080600060025411156104f65760015460008054600254604080517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152600160a060020a03938416602482015260448101929092525191909316926323b872dd9260648083019360209390929083900390910190829087803b15801561041157600080fd5b505af1158015610425573d6000803e3d6000fd5b505050506040513d602081101561043b57600080fd5b505115156104f657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f4661696c6564207472616e7366657246726f6d2062656361757365206f66207360448201527f7566666963656e7420416c6c6f77616e6365206973206e6f742070726f76696460648201527f6564000000000000000000000000000000000000000000000000000000000000608482015290519081900360a40190fd5b6001543390600160a060020a031661050c610905565b600160a060020a03928316815291166020820152604080519182900301906000f08015801561053f573d6000803e3d6000fd5b5090503061054b6105a4565b60408051600160a060020a0385168152336020820152428183015290517f1b81ebef84f1d2411caa47894fb587822eff7c2a8a3580a2d52ce516f840c8219181900360600190a39392505050565b60045481565b600190565b7f47656e6572616c5065726d697373696f6e4d616e61676572000000000000000090565b60408051608081018252604181527f4d616e616765207065726d697373696f6e732077697468696e2074686520536560208201527f63757269747920546f6b656e20616e64206174746163686564206d6f64756c65918101919091527f7300000000000000000000000000000000000000000000000000000000000000606082015290565b600054600160a060020a0316331461066457600080fd5b60045460408051918252602082018390523082820152517fc15ef5ae01a170635c048bc2ddb0e834fe5d866424709f0a7398496a80852ec89181900360600190a1600455565b600054600160a060020a031633146106c157600080fd5b60025460408051918252602082018390523082820152517ff9c53ed8f7f318ac63991d13acab4cf653984ce56b7dc1b3a2083af3f412262d9181900360600190a1600255565b600154600160a060020a031681565b600054600160a060020a0316331461072d57600080fd5b60008054604051600160a060020a03909116917ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482091a26000805473ffffffffffffffffffffffffffffffffffffffff19169055565b60025481565b600054600160a060020a031681565b60408051600081526020810190915290565b600054600160a060020a031633146107c057600080fd5b60035460408051918252602082018390523082820152517fff5bf6a8d25c4e30ad5778be1e2a41c7c45173313279bcbba6e2bb1b1bf7a6db9181900360600190a1600355565b60035481565b60606101006040519081016040528060d7815260200161165e60d79139905090565b600054600160a060020a0316331461084557600080fd5b61084e81610888565b50565b60408051808201909152601a81527f47656e6572616c205065726d697373696f6e204d616e61676572000000000000602082015290565b600160a060020a038116151561089d57600080fd5b60008054604051600160a060020a03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b604051610d4880610916833901905600608060405234801561001057600080fd5b50604051604080610d4883398101604052805160209091015160018054600160a060020a03938416600160a060020a0319918216179091556000805482163317905560028054939092169216919091179055610cd7806100716000396000f3006080604052600436106100b65763ffffffff60e060020a6000350416631613ec9d81146100bb5780634e0a4792146101055780635e1758fa146101435780635f7619a4146101695780636c5aaf50146101815780636faa22a5146101b45780637922c08a146101e55780638658b8b9146101fa578063b84dfbd214610224578063c3a07df614610239578063c45a01551461029e578063d70afa96146102b3578063dec7542f146102c8578063e380d343146102f7575b600080fd5b3480156100c757600080fd5b506100d0610318565b604080517fffffffff000000000000000000000000000000000000000000000000000000009092168252519081900360200190f35b34801561011157600080fd5b5061012f600160a060020a036004358116906024351660443561031d565b604080519115158252519081900360200190f35b34801561014f57600080fd5b50610167600160a060020a0360043516602435610343565b005b34801561017557600080fd5b5061012f600435610551565b34801561018d57600080fd5b506101a2600160a060020a0360043516610890565b60408051918252519081900360200190f35b3480156101c057600080fd5b506101c96108ab565b60408051600160a060020a039092168252519081900360200190f35b3480156101f157600080fd5b506101a26108ba565b34801561020657600080fd5b5061012f600160a060020a03600435811690602435166044356108cc565b34801561023057600080fd5b506101c961092c565b34801561024557600080fd5b5061024e61093b565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561028a578181015183820152602001610272565b505050509050019250505060405180910390f35b3480156102aa57600080fd5b506101c961098d565b3480156102bf57600080fd5b506101a261099c565b3480156102d457600080fd5b5061012f600160a060020a036004358116906024351660443560643515156109c0565b34801561030357600080fd5b506101a2600160a060020a0360043516610c79565b600090565b600360209081526000938452604080852082529284528284209052825290205460ff1681565b600080516020610c8c833981519152600080600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156103a857600080fd5b505af11580156103bc573d6000803e3d6000fd5b505050506040513d60208110156103d257600080fd5b505160005433600160a060020a0392831681149450911614905081806103f55750805b8061049b5750600154604080517f8658b8b9000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018690529051600160a060020a0390921691638658b8b9916064808201926020929091908290030181600087803b15801561046e57600080fd5b505af1158015610482573d6000803e3d6000fd5b505050506040513d602081101561049857600080fd5b50515b15156104f1576040805160e560020a62461bcd02815260206004820152601760248201527f5065726d697373696f6e20636865636b206661696c6564000000000000000000604482015290519081900360640190fd5b600160a060020a038516600081815260046020908152604091829020879055815192835282018690524282820152517f7606544330055376fae1759a3d70de906caf98b81dc3bf7f2582af2ffcd4cfb49181900360600190a15050505050565b60007f4645455f41444d494e0000000000000000000000000000000000000000000000600080600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156105ca57600080fd5b505af11580156105de573d6000803e3d6000fd5b505050506040513d60208110156105f457600080fd5b505160005433600160a060020a0392831681149450911614905081806106175750805b806106bd5750600154604080517f8658b8b9000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018690529051600160a060020a0390921691638658b8b9916064808201926020929091908290030181600087803b15801561069057600080fd5b505af11580156106a4573d6000803e3d6000fd5b505050506040513d60208110156106ba57600080fd5b50515b1515610713576040805160e560020a62461bcd02815260206004820152601760248201527f5065726d697373696f6e20636865636b206661696c6564000000000000000000604482015290519081900360640190fd5b60025460008054604080517f8da5cb5b0000000000000000000000000000000000000000000000000000000081529051600160a060020a03948516946323b872dd94309490911692638da5cb5b9260048083019360209383900390910190829087803b15801561078257600080fd5b505af1158015610796573d6000803e3d6000fd5b505050506040513d60208110156107ac57600080fd5b50516040805160e060020a63ffffffff8616028152600160a060020a039384166004820152929091166024830152604482018990525160648083019260209291908290030181600087803b15801561080357600080fd5b505af1158015610817573d6000803e3d6000fd5b505050506040513d602081101561082d57600080fd5b50511515610885576040805160e560020a62461bcd02815260206004820152601260248201527f556e61626c6520746f2074616b65206665650000000000000000000000000000604482015290519081900360640190fd5b506001949350505050565b600160a060020a031660009081526004602052604090205490565b600254600160a060020a031681565b600080516020610c8c83398151915281565b600160a060020a038316600090815260046020526040812054156109215750600160a060020a03808316600090815260036020908152604080832093871683529281528282208483529052205460ff16610925565b5060005b9392505050565b600154600160a060020a031681565b60408051600180825281830190925260609182919060208083019080388339019050509050600080516020610c8c83398151915281600081518110151561097e57fe5b60209081029091010152905090565b600054600160a060020a031681565b7f4645455f41444d494e000000000000000000000000000000000000000000000081565b6000600080516020610c8c833981519152600080600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015610a2757600080fd5b505af1158015610a3b573d6000803e3d6000fd5b505050506040513d6020811015610a5157600080fd5b505160005433600160a060020a039283168114945091161490508180610a745750805b80610b1a5750600154604080517f8658b8b9000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018690529051600160a060020a0390921691638658b8b9916064808201926020929091908290030181600087803b158015610aed57600080fd5b505af1158015610b01573d6000803e3d6000fd5b505050506040513d6020811015610b1757600080fd5b50515b1515610b70576040805160e560020a62461bcd02815260206004820152601760248201527f5065726d697373696f6e20636865636b206661696c6564000000000000000000604482015290519081900360640190fd5b600160a060020a0388166000908152600460205260409020541515610bdf576040805160e560020a62461bcd02815260206004820152601860248201527f44656c65676174652064657461696c73206e6f74207365740000000000000000604482015290519081900360640190fd5b600160a060020a038088166000818152600360209081526040808320948d168084529482528083208b845282529182902080548a151560ff1990911681179091558251948552908401929092528281018990526060830191909152426080830152517fe7e0f6463adc815ed8a33c10555a87bdef40d69beb9fdd7e4e3e783c35bf958c9181900360a00190a1506001979650505050505050565b6004602052600090815260409020548156004348414e47455f5045524d495353494f4e000000000000000000000000000000a165627a7a72305820c3cab0fcbbc22bd687d85331cd53fa43ff15c3a2b42a466136954a3b1c7617d4002941646420616e642072656d6f7665207065726d697373696f6e7320666f7220746865205365637572697479546f6b656e20616e64206173736f636961746564206d6f64756c65732e205065726d697373696f6e2074797065732073686f756c6420626520656e636f64656420617320627974657333322076616c7565732c20616e64206174746163686564207573696e672074686520776974685065726d206d6f64696669657220746f2072656c6576616e742066756e6374696f6e732e4e6f20696e697446756e6374696f6e2072657175697265642ea165627a7a7230582054922e2a8749807a0e2fff92052854c7ca99549dfdb49e63f38ac2f5e677487b0029",
  "sourceMap": "186:2288:35:-;;;347:199;8:9:-1;5:2;;;30:1;27;20:12;5:2;347:199:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;567:5:64;:18;;-1:-1:-1;;;;;;567:18:64;;;575:10;567:18;;;;;1123:31:14;;-1:-1:-1;;;;;1123:31:14;;;;;;;;;;;;;;1162:9;:22;;;;1192:9;:22;;;;1222:23;:43;186:2288:35;;;;;;",
  "deployedSourceMap": "186:2288:35:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;688:494;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;688:494:35;;;;;;;;;;;;;;;;-1:-1:-1;;;;;688:494:35;;;;;;;;;;;;;;363:38:14;;8:9:-1;5:2;;;30:1;27;20:12;5:2;363:38:14;;;;;;;;;;;;;;;;;;;;1246:71:35;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1246:71:35;;;;;;;;;;;;;;;;;;;;;;;1381:98;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1381:98:35;;;;1550:145;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1550:145:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;1550:145:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3197:265:14;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3197:265:14;;;;;;;2548:193;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2548:193:14;;;;;275:22;;8:9:-1;5:2;;;30:1;27;20:12;5:2;275:22:14;;;;827:111:64;;8:9:-1;5:2;;;30:1;27;20:12;5:2;827:111:64;;;;303:24:14;;8:9:-1;5:2;;;30:1;27;20:12;5:2;303:24:14;;;;238:20:64;;8:9:-1;5:2;;;30:1;27;20:12;5:2;238:20:64;;;;2326:146:35;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2326:146:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;2326:146:35;;;;;;;;;;;;;;;;;2862:193:14;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2862:193:14;;;;;333:24;;8:9:-1;5:2;;;30:1;27;20:12;5:2;333:24:14;;;;1950:296:35;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1950:296:35;;;;1100:103:64;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1100:103:64;-1:-1:-1;;;;;1100:103:64;;;;;1760:101:35;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1760:101:35;;;;688:494;740:7;930:25;774:1;762:9;;:13;759:161;;;797:9;;;832:5;;839:9;;797:52;;;;;;820:10;797:52;;;;-1:-1:-1;;;;;832:5:35;;;797:52;;;;;;;;;;;;:9;;;;;:22;;:52;;;;;;;;;;;;;;;;;;;:9;:52;;;5:2:-1;;;;30:1;27;20:12;5:2;797:52:35;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;797:52:35;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;797:52:35;789:131;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1007:9;;987:10;;-1:-1:-1;;;;;1007:9:35;958:60;;:::i;:::-;-1:-1:-1;;;;;958:60:35;;;;;;;;;;;;;;;;;;;;-1:-1:-1;958:60:35;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;930:88:35;-1:-1:-1;1109:4:35;1090:9;:7;:9::i;:::-;1033:99;;;-1:-1:-1;;;;;1033:99:35;;;;1116:10;1033:99;;;;1128:3;1033:99;;;;;;;;;;;;;;;1157:17;688:494;-1:-1:-1;;;688:494:35:o;363:38:14:-;;;;:::o;1246:71:35:-;1309:1;1246:71;:::o;1381:98::-;1439:33;1381:98;:::o;1550:145::-;1614:74;;;;;;;;;;;;;;;;;;;;;;;;;1596:6;1614:74;;;1550:145;:::o;3197:265:14:-;719:5:64;;-1:-1:-1;;;;;719:5:64;705:10;:19;697:28;;;;;;3329:23:14;;3297:93;;;;;;;;;;;;3384:4;3297:93;;;;;;;;;;;;;;3400:23;:46;3197:265::o;2548:193::-;719:5:64;;-1:-1:-1;;;;;719:5:64;705:10;:19;697:28;;;;;;2659:9:14;;2634:65;;;;;;;;;;;;2693:4;2634:65;;;;;;;;;;;;;;2709:9;:25;2548:193::o;275:22::-;;;-1:-1:-1;;;;;275:22:14;;:::o;827:111:64:-;719:5;;-1:-1:-1;;;;;719:5:64;705:10;:19;697:28;;;;;;903:5;;;884:25;;-1:-1:-1;;;;;903:5:64;;;;884:25;;;931:1;915:18;;-1:-1:-1;;915:18:64;;;827:111::o;303:24:14:-;;;;:::o;238:20:64:-;;;-1:-1:-1;;;;;238:20:64;;:::o;2326:146:35:-;2419:16;;;2433:1;2419:16;;;;;;;;;2326:146::o;2862:193:14:-;719:5:64;;-1:-1:-1;;;;;719:5:64;705:10;:19;697:28;;;;;;2973:9:14;;2948:65;;;;;;;;;;;;3007:4;2948:65;;;;;;;;;;;;;;3023:9;:25;2862:193::o;333:24::-;;;;:::o;1950:296:35:-;1997:6;2015:224;;;;;;;;;;;;;;;;;;;;1950:296;:::o;1100:103:64:-;719:5;;-1:-1:-1;;;;;719:5:64;705:10;:19;697:28;;;;;;1169:29;1188:9;1169:18;:29::i;:::-;1100:103;:::o;1760:101:35:-;1819:35;;;;;;;;;;;;;;;;;1760:101;:::o;1338:171:64:-;-1:-1:-1;;;;;1408:23:64;;;;1400:32;;;;;;1464:5;;;1443:38;;-1:-1:-1;;;;;1443:38:64;;;;1464:5;;;1443:38;;;1487:5;:17;;-1:-1:-1;;1487:17:64;-1:-1:-1;;;;;1487:17:64;;;;;;;;;;1338:171::o;186:2288:35:-;;;;;;;;;;:::o",
  "source": "pragma solidity ^0.4.24;\n\nimport \"./GeneralPermissionManager.sol\";\nimport \"../../interfaces/IModuleFactory.sol\";\n\n/**\n * @title Factory for deploying GeneralPermissionManager module\n */\ncontract GeneralPermissionManagerFactory is IModuleFactory {\n\n    /**\n     * @notice Constructor\n     * @param _polyAddress Address of the polytoken\n     */\n    constructor (address _polyAddress, uint256 _setupCost, uint256 _usageCost, uint256 _subscriptionCost) public\n      IModuleFactory(_polyAddress, _setupCost, _usageCost, _subscriptionCost)\n    {\n\n    }\n\n    /**\n     * @notice used to launch the Module with the help of factory\n     * @return address Contract address of the Module\n     */\n    function deploy(bytes /* _data */) external returns(address) {\n        if(setupCost > 0)\n            require(polyToken.transferFrom(msg.sender, owner, setupCost), \"Failed transferFrom because of sufficent Allowance is not provided\");\n        address permissionManager = new GeneralPermissionManager(msg.sender, address(polyToken));\n        emit LogGenerateModuleFromFactory(address(permissionManager), getName(), address(this), msg.sender, now);\n        return address(permissionManager);\n    }\n\n    /**\n     * @notice Type of the Module factory\n     */\n    function getType() public view returns(uint8) {\n        return 1;\n    }\n\n    /**\n     * @notice Get the name of the Module\n     */\n    function getName() public view returns(bytes32) {\n        return \"GeneralPermissionManager\";\n    }\n\n    /**\n     * @notice Get the description of the Module\n     */\n    function getDescription() public view returns(string) {\n        return \"Manage permissions within the Security Token and attached modules\";\n    }\n\n    /**\n     * @notice Get the title of the Module\n     */\n    function getTitle() public  view returns(string) {\n        return \"General Permission Manager\";\n    }\n\n    /**\n     * @notice Get the Instructions that helped to used the module\n     */\n    function getInstructions() public view returns(string) {\n        return \"Add and remove permissions for the SecurityToken and associated modules. Permission types should be encoded as bytes32 values, and attached using the withPerm modifier to relevant functions.No initFunction required.\";\n    }\n\n    /**\n     * @notice Get the tags related to the module factory\n     */\n    function getTags() public view returns(bytes32[]) {\n        bytes32[] memory availableTags = new bytes32[](0);\n        return availableTags;\n    }\n}\n",
  "sourcePath": "/Users/satyamagrawal/Repositories/testing-package/polymath-core/contracts/modules/PermissionManager/GeneralPermissionManagerFactory.sol",
  "ast": {
    "absolutePath": "/Users/satyamagrawal/Repositories/testing-package/polymath-core/contracts/modules/PermissionManager/GeneralPermissionManagerFactory.sol",
    "exportedSymbols": {
      "GeneralPermissionManagerFactory": [
        13287
      ]
    },
    "id": 13288,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 13153,
        "literals": [
          "solidity",
          "^",
          "0.4",
          ".24"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:24:35"
      },
      {
        "absolutePath": "/Users/satyamagrawal/Repositories/testing-package/polymath-core/contracts/modules/PermissionManager/GeneralPermissionManager.sol",
        "file": "./GeneralPermissionManager.sol",
        "id": 13154,
        "nodeType": "ImportDirective",
        "scope": 13288,
        "sourceUnit": 13152,
        "src": "26:40:35",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/satyamagrawal/Repositories/testing-package/polymath-core/contracts/interfaces/IModuleFactory.sol",
        "file": "../../interfaces/IModuleFactory.sol",
        "id": 13155,
        "nodeType": "ImportDirective",
        "scope": 13288,
        "sourceUnit": 9955,
        "src": "67:45:35",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 13156,
              "name": "IModuleFactory",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 9954,
              "src": "230:14:35",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IModuleFactory_$9954",
                "typeString": "contract IModuleFactory"
              }
            },
            "id": 13157,
            "nodeType": "InheritanceSpecifier",
            "src": "230:14:35"
          }
        ],
        "contractDependencies": [
          9954,
          13151,
          22664
        ],
        "contractKind": "contract",
        "documentation": "@title Factory for deploying GeneralPermissionManager module",
        "fullyImplemented": true,
        "id": 13287,
        "linearizedBaseContracts": [
          13287,
          9954,
          22664
        ],
        "name": "GeneralPermissionManagerFactory",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": {
              "id": 13174,
              "nodeType": "Block",
              "src": "538:8:35",
              "statements": []
            },
            "documentation": "@notice Constructor\n@param _polyAddress Address of the polytoken",
            "id": 13175,
            "implemented": true,
            "isConstructor": true,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 13168,
                    "name": "_polyAddress",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 13159,
                    "src": "477:12:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 13169,
                    "name": "_setupCost",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 13161,
                    "src": "491:10:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 13170,
                    "name": "_usageCost",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 13163,
                    "src": "503:10:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 13171,
                    "name": "_subscriptionCost",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 13165,
                    "src": "515:17:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                ],
                "id": 13172,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 13167,
                  "name": "IModuleFactory",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9954,
                  "src": "462:14:35",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_IModuleFactory_$9954_$",
                    "typeString": "type(contract IModuleFactory)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "462:71:35"
              }
            ],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13166,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13159,
                  "name": "_polyAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 13175,
                  "src": "360:20:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13158,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "360:7:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13161,
                  "name": "_setupCost",
                  "nodeType": "VariableDeclaration",
                  "scope": 13175,
                  "src": "382:18:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 13160,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "382:7:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13163,
                  "name": "_usageCost",
                  "nodeType": "VariableDeclaration",
                  "scope": 13175,
                  "src": "402:18:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 13162,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "402:7:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13165,
                  "name": "_subscriptionCost",
                  "nodeType": "VariableDeclaration",
                  "scope": 13175,
                  "src": "422:25:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 13164,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "422:7:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "359:89:35"
            },
            "payable": false,
            "returnParameters": {
              "id": 13173,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "538:0:35"
            },
            "scope": 13287,
            "src": "347:199:35",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 13226,
              "nodeType": "Block",
              "src": "749:433:35",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 13184,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 13182,
                      "name": "setupCost",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9727,
                      "src": "762:9:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 13183,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "774:1:35",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "762:13:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 13196,
                  "nodeType": "IfStatement",
                  "src": "759:161:35",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 13188,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 23131,
                                "src": "820:3:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 13189,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "820:10:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 13190,
                              "name": "owner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 22582,
                              "src": "832:5:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 13191,
                              "name": "setupCost",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9727,
                              "src": "839:9:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 13186,
                              "name": "polyToken",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9725,
                              "src": "797:9:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ERC20_$22837",
                                "typeString": "contract ERC20"
                              }
                            },
                            "id": 13187,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "transferFrom",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 22819,
                            "src": "797:22:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$",
                              "typeString": "function (address,address,uint256) external returns (bool)"
                            }
                          },
                          "id": 13192,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "797:52:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "hexValue": "4661696c6564207472616e7366657246726f6d2062656361757365206f6620737566666963656e7420416c6c6f77616e6365206973206e6f742070726f7669646564",
                          "id": 13193,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "string",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "851:68:35",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_stringliteral_39f8133d9e40dc5e6b34d9a9e536ce9c723fe05af13c2feb51de7d902ca65f7f",
                            "typeString": "literal_string \"Failed transferFrom because of sufficent Allowance is not provided\""
                          },
                          "value": "Failed transferFrom because of sufficent Allowance is not provided"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          {
                            "typeIdentifier": "t_stringliteral_39f8133d9e40dc5e6b34d9a9e536ce9c723fe05af13c2feb51de7d902ca65f7f",
                            "typeString": "literal_string \"Failed transferFrom because of sufficent Allowance is not provided\""
                          }
                        ],
                        "id": 13185,
                        "name": "require",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [
                          23134,
                          23135
                        ],
                        "referencedDeclaration": 23135,
                        "src": "789:7:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                          "typeString": "function (bool,string memory) pure"
                        }
                      },
                      "id": 13194,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "789:131:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 13195,
                    "nodeType": "ExpressionStatement",
                    "src": "789:131:35"
                  }
                },
                {
                  "assignments": [
                    13198
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 13198,
                      "name": "permissionManager",
                      "nodeType": "VariableDeclaration",
                      "scope": 13227,
                      "src": "930:25:35",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 13197,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "930:7:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 13207,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 13201,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 23131,
                          "src": "987:3:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 13202,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "987:10:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 13204,
                            "name": "polyToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9725,
                            "src": "1007:9:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ERC20_$22837",
                              "typeString": "contract ERC20"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_ERC20_$22837",
                              "typeString": "contract ERC20"
                            }
                          ],
                          "id": 13203,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "999:7:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 13205,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "999:18:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 13200,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "958:28:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_creation_nonpayable$_t_address_$_t_address_$returns$_t_contract$_GeneralPermissionManager_$13151_$",
                        "typeString": "function (address,address) returns (contract GeneralPermissionManager)"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 13199,
                        "name": "GeneralPermissionManager",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 13151,
                        "src": "962:24:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_GeneralPermissionManager_$13151",
                          "typeString": "contract GeneralPermissionManager"
                        }
                      }
                    },
                    "id": 13206,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "958:60:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_GeneralPermissionManager_$13151",
                      "typeString": "contract GeneralPermissionManager"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "930:88:35"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 13210,
                            "name": "permissionManager",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13198,
                            "src": "1070:17:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 13209,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "1062:7:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 13211,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1062:26:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 13212,
                          "name": "getName",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [
                            13243
                          ],
                          "referencedDeclaration": 13243,
                          "src": "1090:7:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_bytes32_$",
                            "typeString": "function () view returns (bytes32)"
                          }
                        },
                        "id": 13213,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1090:9:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 13215,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 23270,
                            "src": "1109:4:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_GeneralPermissionManagerFactory_$13287",
                              "typeString": "contract GeneralPermissionManagerFactory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_GeneralPermissionManagerFactory_$13287",
                              "typeString": "contract GeneralPermissionManagerFactory"
                            }
                          ],
                          "id": 13214,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "1101:7:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 13216,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1101:13:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 13217,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 23131,
                          "src": "1116:3:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 13218,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "1116:10:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 13219,
                        "name": "now",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 23133,
                        "src": "1128:3:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 13208,
                      "name": "LogGenerateModuleFromFactory",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9767,
                      "src": "1033:28:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_bytes32_$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,bytes32,address,address,uint256)"
                      }
                    },
                    "id": 13220,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1033:99:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13221,
                  "nodeType": "EmitStatement",
                  "src": "1028:104:35"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 13223,
                        "name": "permissionManager",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13198,
                        "src": "1157:17:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 13222,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "1149:7:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": "address"
                    },
                    "id": 13224,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1149:26:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 13181,
                  "id": 13225,
                  "nodeType": "Return",
                  "src": "1142:33:35"
                }
              ]
            },
            "documentation": "@notice used to launch the Module with the help of factory\n@return address Contract address of the Module",
            "id": 13227,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "deploy",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13178,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13177,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 13227,
                  "src": "704:5:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 13176,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "704:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "703:19:35"
            },
            "payable": false,
            "returnParameters": {
              "id": 13181,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13180,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 13227,
                  "src": "740:7:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13179,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "740:7:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "739:9:35"
            },
            "scope": 13287,
            "src": "688:494:35",
            "stateMutability": "nonpayable",
            "superFunction": 9804,
            "visibility": "external"
          },
          {
            "body": {
              "id": 13234,
              "nodeType": "Block",
              "src": "1292:25:35",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "31",
                    "id": 13232,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1309:1:35",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_1_by_1",
                      "typeString": "int_const 1"
                    },
                    "value": "1"
                  },
                  "functionReturnParameters": 13231,
                  "id": 13233,
                  "nodeType": "Return",
                  "src": "1302:8:35"
                }
              ]
            },
            "documentation": "@notice Type of the Module factory",
            "id": 13235,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getType",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13228,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1262:2:35"
            },
            "payable": false,
            "returnParameters": {
              "id": 13231,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13230,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 13235,
                  "src": "1285:5:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 13229,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "1285:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1284:7:35"
            },
            "scope": 13287,
            "src": "1246:71:35",
            "stateMutability": "view",
            "superFunction": 9809,
            "visibility": "public"
          },
          {
            "body": {
              "id": 13242,
              "nodeType": "Block",
              "src": "1429:50:35",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "47656e6572616c5065726d697373696f6e4d616e61676572",
                    "id": 13240,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1446:26:35",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_e0523070a4fb32cb22c66d904bd47332afa6f0c1bd53848a1cd82671beb763a8",
                      "typeString": "literal_string \"GeneralPermissionManager\""
                    },
                    "value": "GeneralPermissionManager"
                  },
                  "functionReturnParameters": 13239,
                  "id": 13241,
                  "nodeType": "Return",
                  "src": "1439:33:35"
                }
              ]
            },
            "documentation": "@notice Get the name of the Module",
            "id": 13243,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getName",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13236,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1397:2:35"
            },
            "payable": false,
            "returnParameters": {
              "id": 13239,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13238,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 13243,
                  "src": "1420:7:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 13237,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1420:7:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1419:9:35"
            },
            "scope": 13287,
            "src": "1381:98:35",
            "stateMutability": "view",
            "superFunction": 9814,
            "visibility": "public"
          },
          {
            "body": {
              "id": 13250,
              "nodeType": "Block",
              "src": "1604:91:35",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "4d616e616765207065726d697373696f6e732077697468696e2074686520536563757269747920546f6b656e20616e64206174746163686564206d6f64756c6573",
                    "id": 13248,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1621:67:35",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_95858bdc75da0ae7ee120b035cc88a11e6206a5e98c98a1a25232f5598f9c64e",
                      "typeString": "literal_string \"Manage permissions within the Security Token and attached modules\""
                    },
                    "value": "Manage permissions within the Security Token and attached modules"
                  },
                  "functionReturnParameters": 13247,
                  "id": 13249,
                  "nodeType": "Return",
                  "src": "1614:74:35"
                }
              ]
            },
            "documentation": "@notice Get the description of the Module",
            "id": 13251,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getDescription",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13244,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1573:2:35"
            },
            "payable": false,
            "returnParameters": {
              "id": 13247,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13246,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 13251,
                  "src": "1596:6:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 13245,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1596:6:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1595:8:35"
            },
            "scope": 13287,
            "src": "1550:145:35",
            "stateMutability": "view",
            "superFunction": 9819,
            "visibility": "public"
          },
          {
            "body": {
              "id": 13258,
              "nodeType": "Block",
              "src": "1809:52:35",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "47656e6572616c205065726d697373696f6e204d616e61676572",
                    "id": 13256,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1826:28:35",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_8f50b2b084334fa150b22185281c406f8b025fe6c0f2e57c854ce83f27168ddd",
                      "typeString": "literal_string \"General Permission Manager\""
                    },
                    "value": "General Permission Manager"
                  },
                  "functionReturnParameters": 13255,
                  "id": 13257,
                  "nodeType": "Return",
                  "src": "1819:35:35"
                }
              ]
            },
            "documentation": "@notice Get the title of the Module",
            "id": 13259,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getTitle",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13252,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1777:2:35"
            },
            "payable": false,
            "returnParameters": {
              "id": 13255,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13254,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 13259,
                  "src": "1801:6:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 13253,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1801:6:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1800:8:35"
            },
            "scope": 13287,
            "src": "1760:101:35",
            "stateMutability": "view",
            "superFunction": 9824,
            "visibility": "public"
          },
          {
            "body": {
              "id": 13266,
              "nodeType": "Block",
              "src": "2005:241:35",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "41646420616e642072656d6f7665207065726d697373696f6e7320666f7220746865205365637572697479546f6b656e20616e64206173736f636961746564206d6f64756c65732e205065726d697373696f6e2074797065732073686f756c6420626520656e636f64656420617320627974657333322076616c7565732c20616e64206174746163686564207573696e672074686520776974685065726d206d6f64696669657220746f2072656c6576616e742066756e6374696f6e732e4e6f20696e697446756e6374696f6e2072657175697265642e",
                    "id": 13264,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "2022:217:35",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_dec8637340747e3abfb3f290157976f4004de115160a61cfeeda096aee3b173f",
                      "typeString": "literal_string \"Add and remove permissions for the SecurityToken and associated modules. Permission types should be encoded as bytes32 values, and attached using the withPerm modifier to relevant functions.No initFunction required.\""
                    },
                    "value": "Add and remove permissions for the SecurityToken and associated modules. Permission types should be encoded as bytes32 values, and attached using the withPerm modifier to relevant functions.No initFunction required."
                  },
                  "functionReturnParameters": 13263,
                  "id": 13265,
                  "nodeType": "Return",
                  "src": "2015:224:35"
                }
              ]
            },
            "documentation": "@notice Get the Instructions that helped to used the module",
            "id": 13267,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getInstructions",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13260,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1974:2:35"
            },
            "payable": false,
            "returnParameters": {
              "id": 13263,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13262,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 13267,
                  "src": "1997:6:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 13261,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1997:6:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1996:8:35"
            },
            "scope": 13287,
            "src": "1950:296:35",
            "stateMutability": "view",
            "superFunction": 9829,
            "visibility": "public"
          },
          {
            "body": {
              "id": 13285,
              "nodeType": "Block",
              "src": "2376:96:35",
              "statements": [
                {
                  "assignments": [
                    13276
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 13276,
                      "name": "availableTags",
                      "nodeType": "VariableDeclaration",
                      "scope": 13286,
                      "src": "2386:30:35",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                        "typeString": "bytes32[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 13274,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "2386:7:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 13275,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "2386:9:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                          "typeString": "bytes32[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 13282,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 13280,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2433:1:35",
                        "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": 13279,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "2419:13:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_bytes32_$dyn_memory_$",
                        "typeString": "function (uint256) pure returns (bytes32[] memory)"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 13277,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "2423:7:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 13278,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "2423:9:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                          "typeString": "bytes32[]"
                        }
                      }
                    },
                    "id": 13281,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2419:16:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_memory",
                      "typeString": "bytes32[] memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2386:49:35"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 13283,
                    "name": "availableTags",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 13276,
                    "src": "2452:13:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                      "typeString": "bytes32[] memory"
                    }
                  },
                  "functionReturnParameters": 13272,
                  "id": 13284,
                  "nodeType": "Return",
                  "src": "2445:20:35"
                }
              ]
            },
            "documentation": "@notice Get the tags related to the module factory",
            "id": 13286,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getTags",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13268,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2342:2:35"
            },
            "payable": false,
            "returnParameters": {
              "id": 13272,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13271,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 13286,
                  "src": "2365:9:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                    "typeString": "bytes32[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 13269,
                      "name": "bytes32",
                      "nodeType": "ElementaryTypeName",
                      "src": "2365:7:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "id": 13270,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "2365:9:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                      "typeString": "bytes32[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2364:11:35"
            },
            "scope": 13287,
            "src": "2326:146:35",
            "stateMutability": "view",
            "superFunction": 9835,
            "visibility": "public"
          }
        ],
        "scope": 13288,
        "src": "186:2288:35"
      }
    ],
    "src": "0:2475:35"
  },
  "legacyAST": {
    "absolutePath": "/Users/satyamagrawal/Repositories/testing-package/polymath-core/contracts/modules/PermissionManager/GeneralPermissionManagerFactory.sol",
    "exportedSymbols": {
      "GeneralPermissionManagerFactory": [
        13287
      ]
    },
    "id": 13288,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 13153,
        "literals": [
          "solidity",
          "^",
          "0.4",
          ".24"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:24:35"
      },
      {
        "absolutePath": "/Users/satyamagrawal/Repositories/testing-package/polymath-core/contracts/modules/PermissionManager/GeneralPermissionManager.sol",
        "file": "./GeneralPermissionManager.sol",
        "id": 13154,
        "nodeType": "ImportDirective",
        "scope": 13288,
        "sourceUnit": 13152,
        "src": "26:40:35",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/satyamagrawal/Repositories/testing-package/polymath-core/contracts/interfaces/IModuleFactory.sol",
        "file": "../../interfaces/IModuleFactory.sol",
        "id": 13155,
        "nodeType": "ImportDirective",
        "scope": 13288,
        "sourceUnit": 9955,
        "src": "67:45:35",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 13156,
              "name": "IModuleFactory",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 9954,
              "src": "230:14:35",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IModuleFactory_$9954",
                "typeString": "contract IModuleFactory"
              }
            },
            "id": 13157,
            "nodeType": "InheritanceSpecifier",
            "src": "230:14:35"
          }
        ],
        "contractDependencies": [
          9954,
          13151,
          22664
        ],
        "contractKind": "contract",
        "documentation": "@title Factory for deploying GeneralPermissionManager module",
        "fullyImplemented": true,
        "id": 13287,
        "linearizedBaseContracts": [
          13287,
          9954,
          22664
        ],
        "name": "GeneralPermissionManagerFactory",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": {
              "id": 13174,
              "nodeType": "Block",
              "src": "538:8:35",
              "statements": []
            },
            "documentation": "@notice Constructor\n@param _polyAddress Address of the polytoken",
            "id": 13175,
            "implemented": true,
            "isConstructor": true,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 13168,
                    "name": "_polyAddress",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 13159,
                    "src": "477:12:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 13169,
                    "name": "_setupCost",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 13161,
                    "src": "491:10:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 13170,
                    "name": "_usageCost",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 13163,
                    "src": "503:10:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 13171,
                    "name": "_subscriptionCost",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 13165,
                    "src": "515:17:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                ],
                "id": 13172,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 13167,
                  "name": "IModuleFactory",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9954,
                  "src": "462:14:35",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_IModuleFactory_$9954_$",
                    "typeString": "type(contract IModuleFactory)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "462:71:35"
              }
            ],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13166,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13159,
                  "name": "_polyAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 13175,
                  "src": "360:20:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13158,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "360:7:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13161,
                  "name": "_setupCost",
                  "nodeType": "VariableDeclaration",
                  "scope": 13175,
                  "src": "382:18:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 13160,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "382:7:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13163,
                  "name": "_usageCost",
                  "nodeType": "VariableDeclaration",
                  "scope": 13175,
                  "src": "402:18:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 13162,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "402:7:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13165,
                  "name": "_subscriptionCost",
                  "nodeType": "VariableDeclaration",
                  "scope": 13175,
                  "src": "422:25:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 13164,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "422:7:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "359:89:35"
            },
            "payable": false,
            "returnParameters": {
              "id": 13173,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "538:0:35"
            },
            "scope": 13287,
            "src": "347:199:35",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 13226,
              "nodeType": "Block",
              "src": "749:433:35",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 13184,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 13182,
                      "name": "setupCost",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9727,
                      "src": "762:9:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 13183,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "774:1:35",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "762:13:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 13196,
                  "nodeType": "IfStatement",
                  "src": "759:161:35",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 13188,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 23131,
                                "src": "820:3:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 13189,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "820:10:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 13190,
                              "name": "owner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 22582,
                              "src": "832:5:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 13191,
                              "name": "setupCost",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9727,
                              "src": "839:9:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 13186,
                              "name": "polyToken",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9725,
                              "src": "797:9:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ERC20_$22837",
                                "typeString": "contract ERC20"
                              }
                            },
                            "id": 13187,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "transferFrom",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 22819,
                            "src": "797:22:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$",
                              "typeString": "function (address,address,uint256) external returns (bool)"
                            }
                          },
                          "id": 13192,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "797:52:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "hexValue": "4661696c6564207472616e7366657246726f6d2062656361757365206f6620737566666963656e7420416c6c6f77616e6365206973206e6f742070726f7669646564",
                          "id": 13193,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "string",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "851:68:35",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_stringliteral_39f8133d9e40dc5e6b34d9a9e536ce9c723fe05af13c2feb51de7d902ca65f7f",
                            "typeString": "literal_string \"Failed transferFrom because of sufficent Allowance is not provided\""
                          },
                          "value": "Failed transferFrom because of sufficent Allowance is not provided"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          {
                            "typeIdentifier": "t_stringliteral_39f8133d9e40dc5e6b34d9a9e536ce9c723fe05af13c2feb51de7d902ca65f7f",
                            "typeString": "literal_string \"Failed transferFrom because of sufficent Allowance is not provided\""
                          }
                        ],
                        "id": 13185,
                        "name": "require",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [
                          23134,
                          23135
                        ],
                        "referencedDeclaration": 23135,
                        "src": "789:7:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                          "typeString": "function (bool,string memory) pure"
                        }
                      },
                      "id": 13194,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "789:131:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 13195,
                    "nodeType": "ExpressionStatement",
                    "src": "789:131:35"
                  }
                },
                {
                  "assignments": [
                    13198
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 13198,
                      "name": "permissionManager",
                      "nodeType": "VariableDeclaration",
                      "scope": 13227,
                      "src": "930:25:35",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 13197,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "930:7:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 13207,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 13201,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 23131,
                          "src": "987:3:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 13202,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "987:10:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 13204,
                            "name": "polyToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9725,
                            "src": "1007:9:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ERC20_$22837",
                              "typeString": "contract ERC20"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_ERC20_$22837",
                              "typeString": "contract ERC20"
                            }
                          ],
                          "id": 13203,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "999:7:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 13205,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "999:18:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 13200,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "958:28:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_creation_nonpayable$_t_address_$_t_address_$returns$_t_contract$_GeneralPermissionManager_$13151_$",
                        "typeString": "function (address,address) returns (contract GeneralPermissionManager)"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 13199,
                        "name": "GeneralPermissionManager",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 13151,
                        "src": "962:24:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_GeneralPermissionManager_$13151",
                          "typeString": "contract GeneralPermissionManager"
                        }
                      }
                    },
                    "id": 13206,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "958:60:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_GeneralPermissionManager_$13151",
                      "typeString": "contract GeneralPermissionManager"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "930:88:35"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 13210,
                            "name": "permissionManager",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13198,
                            "src": "1070:17:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 13209,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "1062:7:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 13211,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1062:26:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 13212,
                          "name": "getName",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [
                            13243
                          ],
                          "referencedDeclaration": 13243,
                          "src": "1090:7:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_bytes32_$",
                            "typeString": "function () view returns (bytes32)"
                          }
                        },
                        "id": 13213,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1090:9:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 13215,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 23270,
                            "src": "1109:4:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_GeneralPermissionManagerFactory_$13287",
                              "typeString": "contract GeneralPermissionManagerFactory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_GeneralPermissionManagerFactory_$13287",
                              "typeString": "contract GeneralPermissionManagerFactory"
                            }
                          ],
                          "id": 13214,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "1101:7:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 13216,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1101:13:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 13217,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 23131,
                          "src": "1116:3:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 13218,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "1116:10:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 13219,
                        "name": "now",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 23133,
                        "src": "1128:3:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 13208,
                      "name": "LogGenerateModuleFromFactory",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9767,
                      "src": "1033:28:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_bytes32_$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,bytes32,address,address,uint256)"
                      }
                    },
                    "id": 13220,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1033:99:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13221,
                  "nodeType": "EmitStatement",
                  "src": "1028:104:35"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 13223,
                        "name": "permissionManager",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13198,
                        "src": "1157:17:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 13222,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "1149:7:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": "address"
                    },
                    "id": 13224,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1149:26:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 13181,
                  "id": 13225,
                  "nodeType": "Return",
                  "src": "1142:33:35"
                }
              ]
            },
            "documentation": "@notice used to launch the Module with the help of factory\n@return address Contract address of the Module",
            "id": 13227,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "deploy",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13178,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13177,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 13227,
                  "src": "704:5:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 13176,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "704:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "703:19:35"
            },
            "payable": false,
            "returnParameters": {
              "id": 13181,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13180,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 13227,
                  "src": "740:7:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13179,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "740:7:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "739:9:35"
            },
            "scope": 13287,
            "src": "688:494:35",
            "stateMutability": "nonpayable",
            "superFunction": 9804,
            "visibility": "external"
          },
          {
            "body": {
              "id": 13234,
              "nodeType": "Block",
              "src": "1292:25:35",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "31",
                    "id": 13232,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1309:1:35",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_1_by_1",
                      "typeString": "int_const 1"
                    },
                    "value": "1"
                  },
                  "functionReturnParameters": 13231,
                  "id": 13233,
                  "nodeType": "Return",
                  "src": "1302:8:35"
                }
              ]
            },
            "documentation": "@notice Type of the Module factory",
            "id": 13235,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getType",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13228,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1262:2:35"
            },
            "payable": false,
            "returnParameters": {
              "id": 13231,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13230,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 13235,
                  "src": "1285:5:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 13229,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "1285:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1284:7:35"
            },
            "scope": 13287,
            "src": "1246:71:35",
            "stateMutability": "view",
            "superFunction": 9809,
            "visibility": "public"
          },
          {
            "body": {
              "id": 13242,
              "nodeType": "Block",
              "src": "1429:50:35",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "47656e6572616c5065726d697373696f6e4d616e61676572",
                    "id": 13240,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1446:26:35",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_e0523070a4fb32cb22c66d904bd47332afa6f0c1bd53848a1cd82671beb763a8",
                      "typeString": "literal_string \"GeneralPermissionManager\""
                    },
                    "value": "GeneralPermissionManager"
                  },
                  "functionReturnParameters": 13239,
                  "id": 13241,
                  "nodeType": "Return",
                  "src": "1439:33:35"
                }
              ]
            },
            "documentation": "@notice Get the name of the Module",
            "id": 13243,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getName",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13236,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1397:2:35"
            },
            "payable": false,
            "returnParameters": {
              "id": 13239,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13238,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 13243,
                  "src": "1420:7:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 13237,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1420:7:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1419:9:35"
            },
            "scope": 13287,
            "src": "1381:98:35",
            "stateMutability": "view",
            "superFunction": 9814,
            "visibility": "public"
          },
          {
            "body": {
              "id": 13250,
              "nodeType": "Block",
              "src": "1604:91:35",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "4d616e616765207065726d697373696f6e732077697468696e2074686520536563757269747920546f6b656e20616e64206174746163686564206d6f64756c6573",
                    "id": 13248,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1621:67:35",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_95858bdc75da0ae7ee120b035cc88a11e6206a5e98c98a1a25232f5598f9c64e",
                      "typeString": "literal_string \"Manage permissions within the Security Token and attached modules\""
                    },
                    "value": "Manage permissions within the Security Token and attached modules"
                  },
                  "functionReturnParameters": 13247,
                  "id": 13249,
                  "nodeType": "Return",
                  "src": "1614:74:35"
                }
              ]
            },
            "documentation": "@notice Get the description of the Module",
            "id": 13251,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getDescription",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13244,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1573:2:35"
            },
            "payable": false,
            "returnParameters": {
              "id": 13247,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13246,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 13251,
                  "src": "1596:6:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 13245,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1596:6:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1595:8:35"
            },
            "scope": 13287,
            "src": "1550:145:35",
            "stateMutability": "view",
            "superFunction": 9819,
            "visibility": "public"
          },
          {
            "body": {
              "id": 13258,
              "nodeType": "Block",
              "src": "1809:52:35",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "47656e6572616c205065726d697373696f6e204d616e61676572",
                    "id": 13256,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1826:28:35",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_8f50b2b084334fa150b22185281c406f8b025fe6c0f2e57c854ce83f27168ddd",
                      "typeString": "literal_string \"General Permission Manager\""
                    },
                    "value": "General Permission Manager"
                  },
                  "functionReturnParameters": 13255,
                  "id": 13257,
                  "nodeType": "Return",
                  "src": "1819:35:35"
                }
              ]
            },
            "documentation": "@notice Get the title of the Module",
            "id": 13259,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getTitle",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13252,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1777:2:35"
            },
            "payable": false,
            "returnParameters": {
              "id": 13255,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13254,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 13259,
                  "src": "1801:6:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 13253,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1801:6:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1800:8:35"
            },
            "scope": 13287,
            "src": "1760:101:35",
            "stateMutability": "view",
            "superFunction": 9824,
            "visibility": "public"
          },
          {
            "body": {
              "id": 13266,
              "nodeType": "Block",
              "src": "2005:241:35",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "41646420616e642072656d6f7665207065726d697373696f6e7320666f7220746865205365637572697479546f6b656e20616e64206173736f636961746564206d6f64756c65732e205065726d697373696f6e2074797065732073686f756c6420626520656e636f64656420617320627974657333322076616c7565732c20616e64206174746163686564207573696e672074686520776974685065726d206d6f64696669657220746f2072656c6576616e742066756e6374696f6e732e4e6f20696e697446756e6374696f6e2072657175697265642e",
                    "id": 13264,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "2022:217:35",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_dec8637340747e3abfb3f290157976f4004de115160a61cfeeda096aee3b173f",
                      "typeString": "literal_string \"Add and remove permissions for the SecurityToken and associated modules. Permission types should be encoded as bytes32 values, and attached using the withPerm modifier to relevant functions.No initFunction required.\""
                    },
                    "value": "Add and remove permissions for the SecurityToken and associated modules. Permission types should be encoded as bytes32 values, and attached using the withPerm modifier to relevant functions.No initFunction required."
                  },
                  "functionReturnParameters": 13263,
                  "id": 13265,
                  "nodeType": "Return",
                  "src": "2015:224:35"
                }
              ]
            },
            "documentation": "@notice Get the Instructions that helped to used the module",
            "id": 13267,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getInstructions",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13260,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1974:2:35"
            },
            "payable": false,
            "returnParameters": {
              "id": 13263,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13262,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 13267,
                  "src": "1997:6:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 13261,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1997:6:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1996:8:35"
            },
            "scope": 13287,
            "src": "1950:296:35",
            "stateMutability": "view",
            "superFunction": 9829,
            "visibility": "public"
          },
          {
            "body": {
              "id": 13285,
              "nodeType": "Block",
              "src": "2376:96:35",
              "statements": [
                {
                  "assignments": [
                    13276
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 13276,
                      "name": "availableTags",
                      "nodeType": "VariableDeclaration",
                      "scope": 13286,
                      "src": "2386:30:35",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                        "typeString": "bytes32[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 13274,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "2386:7:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 13275,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "2386:9:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                          "typeString": "bytes32[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 13282,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 13280,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2433:1:35",
                        "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": 13279,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "2419:13:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_bytes32_$dyn_memory_$",
                        "typeString": "function (uint256) pure returns (bytes32[] memory)"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 13277,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "2423:7:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 13278,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "2423:9:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                          "typeString": "bytes32[]"
                        }
                      }
                    },
                    "id": 13281,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2419:16:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_memory",
                      "typeString": "bytes32[] memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2386:49:35"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 13283,
                    "name": "availableTags",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 13276,
                    "src": "2452:13:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                      "typeString": "bytes32[] memory"
                    }
                  },
                  "functionReturnParameters": 13272,
                  "id": 13284,
                  "nodeType": "Return",
                  "src": "2445:20:35"
                }
              ]
            },
            "documentation": "@notice Get the tags related to the module factory",
            "id": 13286,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getTags",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13268,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2342:2:35"
            },
            "payable": false,
            "returnParameters": {
              "id": 13272,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13271,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 13286,
                  "src": "2365:9:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                    "typeString": "bytes32[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 13269,
                      "name": "bytes32",
                      "nodeType": "ElementaryTypeName",
                      "src": "2365:7:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "id": 13270,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "2365:9:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                      "typeString": "bytes32[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2364:11:35"
            },
            "scope": 13287,
            "src": "2326:146:35",
            "stateMutability": "view",
            "superFunction": 9835,
            "visibility": "public"
          }
        ],
        "scope": 13288,
        "src": "186:2288:35"
      }
    ],
    "src": "0:2475:35"
  },
  "compiler": {
    "name": "solc",
    "version": "0.4.24+commit.e67f0147.Emscripten.clang"
  },
  "networks": {
    "15": {
      "events": {},
      "links": {},
      "address": "0x357026b4be90f930849a2504389c0b749caaaa4b",
      "transactionHash": "0xbc1ebf077c2c1433c3ee9c228874ece41ed5b29f6ef9e27a57f3e58e94408c3c"
    }
  },
  "schemaVersion": "2.0.1",
  "updatedAt": "2018-08-21T09:48:28.914Z"
}