{
  "contractName": "ERC20DividendCheckpointFactory",
  "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": "0x608060405234801561001057600080fd5b50604051608080613257833981016040908152815160208301519183015160609093015160008054600160a060020a0319908116331790915560018054600160a060020a0390941693909116929092179091556002919091556003919091556004556131d6806100816000396000f3006080604052600436106100ef5763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166277436081146100f457806306184a251461013057806315dae03e1461015757806317d7de7c146101825780631a092541146101975780633ae192bd1461022157806358a191c31461023b5780636faa22a514610253578063715018a6146102685780637e363ffa1461027d5780638da5cb5b14610292578063995d9ab7146102a7578063aac67b051461030c578063d54c472614610324578063e0d5497014610339578063f2fde38b1461034e578063ff3c1a8f1461036f575b600080fd5b34801561010057600080fd5b506101146004803560248101910135610384565b60408051600160a060020a039092168252519081900360200190f35b34801561013c57600080fd5b50610145610545565b60408051918252519081900360200190f35b34801561016357600080fd5b5061016c61054b565b6040805160ff9092168252519081900360200190f35b34801561018e57600080fd5b50610145610550565b3480156101a357600080fd5b506101ac610574565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101e65781810151838201526020016101ce565b50505050905090810190601f1680156102135780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561022d57600080fd5b506102396004356105f9565b005b34801561024757600080fd5b50610239600435610656565b34801561025f57600080fd5b506101146106b3565b34801561027457600080fd5b506102396106c2565b34801561028957600080fd5b5061014561072e565b34801561029e57600080fd5b50610114610734565b3480156102b357600080fd5b506102bc610743565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156102f85781810151838201526020016102e0565b505050509050019250505060405180910390f35b34801561031857600080fd5b5061023960043561081d565b34801561033057600080fd5b5061014561087a565b34801561034557600080fd5b506101ac610880565b34801561035a57600080fd5b50610239600160a060020a03600435166108a1565b34801561037b57600080fd5b506101ac6108c4565b60008060025411156104f45760015460008054600254604080517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152600160a060020a03938416602482015260448101929092525191909316926323b872dd9260648083019360209390929083900390910190829087803b15801561040f57600080fd5b505af1158015610423573d6000803e3d6000fd5b505050506040513d602081101561043957600080fd5b505115156104f457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f4661696c6564207472616e7366657246726f6d2062656361757365206f66207360448201527f7566666963656e7420416c6c6f77616e6365206973206e6f742070726f76696460648201527f6564000000000000000000000000000000000000000000000000000000000000608482015290519081900360a40190fd5b6001543390600160a060020a031661050a610978565b600160a060020a03928316815291166020820152604080519182900301906000f08015801561053d573d6000803e3d6000fd5b509392505050565b60045481565b600490565b7f45524332304469766964656e64436865636b706f696e7400000000000000000090565b60408051608081018252604181527f437265617465204552433230206469766964656e647320666f7220746f6b656e60208201527f20686f6c64657273206174206120737065636966696320636865636b706f696e918101919091527f7400000000000000000000000000000000000000000000000000000000000000606082015290565b600054600160a060020a0316331461061057600080fd5b60045460408051918252602082018390523082820152517fc15ef5ae01a170635c048bc2ddb0e834fe5d866424709f0a7398496a80852ec89181900360600190a1600455565b600054600160a060020a0316331461066d57600080fd5b60025460408051918252602082018390523082820152517ff9c53ed8f7f318ac63991d13acab4cf653984ce56b7dc1b3a2083af3f412262d9181900360600190a1600255565b600154600160a060020a031681565b600054600160a060020a031633146106d957600080fd5b60008054604051600160a060020a03909116917ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482091a26000805473ffffffffffffffffffffffffffffffffffffffff19169055565b60025481565b600054600160a060020a031681565b604080516003808252608082019092526060918291906020820183803883390190505090507f455243323000000000000000000000000000000000000000000000000000000081600081518110151561079857fe5b6020908102909101015280517f4469766964656e6400000000000000000000000000000000000000000000000090829060019081106107d357fe5b6020908102909101015280517f436865636b706f696e7400000000000000000000000000000000000000000000908290600290811061080e57fe5b60209081029091010152905090565b600054600160a060020a0316331461083457600080fd5b60035460408051918252602082018390523082820152517fff5bf6a8d25c4e30ad5778be1e2a41c7c45173313279bcbba6e2bb1b1bf7a6db9181900360600190a1600355565b60035481565b606060c0604051908101604052806083815260200161312860839139905090565b600054600160a060020a031633146108b857600080fd5b6108c1816108fb565b50565b60408051808201909152601981527f4552433230204469766964656e6420436865636b706f696e7400000000000000602082015290565b600160a060020a038116151561091057600080fd5b60008054604051600160a060020a03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60405161279f80610989833901905600608060405234801561001057600080fd5b5060405160408061279f83398101604052805160209091015160018054600160a060020a03938416600160a060020a031991821617909155600080548216331790556002805493909216921691909117905561272e806100716000396000f3006080604052600436106100d75763ffffffff60e060020a6000350416631613ec9d81146100dc57806330008b48146101265780634d58e413146101405780635bea0e1c1461019a5780635daff64e146101d05780635f7619a4146102385780636faa22a51461026457806377bbf28a1461029557806380fef5af146102bf578063814b3fe0146102d4578063aa8b76ea1461033d578063b84dfbd214610355578063c3a07df61461036a578063c45a01551461037f578063cf3b98b214610394578063d70afa96146103b4578063e1726faa146103c9575b600080fd5b3480156100e857600080fd5b506100f16103e7565b604080517fffffffff000000000000000000000000000000000000000000000000000000009092168252519081900360200190f35b34801561013257600080fd5b5061013e6004356103ec565b005b34801561014c57600080fd5b5060408051602060046024803582810135848102808701860190975280865261013e968435963696604495919490910192918291850190849080828437509497506106889650505050505050565b3480156101a657600080fd5b506101be600435600160a060020a0360243516610adc565b60408051918252519081900360200190f35b3480156101dc57600080fd5b506101e8600435610c53565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561022457818101518382015260200161020c565b505050509050019250505060405180910390f35b34801561024457600080fd5b50610250600435610d38565b604080519115158252519081900360200190f35b34801561027057600080fd5b50610279611077565b60408051600160a060020a039092168252519081900360200190f35b3480156102a157600080fd5b5061013e600435602435600160a060020a0360443516606435611086565b3480156102cb57600080fd5b506101be611591565b3480156102e057600080fd5b506102ec6004356115a3565b60408051998a5260208a0198909852888801969096526060880194909452600160a060020a03909216608087015260a086015260c085015260e0840152151561010083015251908190036101200190f35b34801561034957600080fd5b5061013e600435611609565b34801561036157600080fd5b506102796119da565b34801561037657600080fd5b506101e86119e9565b34801561038b57600080fd5b50610279611a3b565b61013e600435602435600160a060020a0360443516606435608435611a4a565b3480156103c057600080fd5b506101be611f27565b3480156103d557600080fd5b5061013e600435602435604435611f4b565b600090565b60035460009082908110610438576040805160e560020a62461bcd02815260206004820152601860248201526000805160206126e3833981519152604482015290519081900360640190fd5b600380548290811061044657fe5b90600052602060002090600a02016002015442101515156104d7576040805160e560020a62461bcd02815260206004820152602260248201527f4469766964656e64206d6174757269747920697320696e20746865206675747560448201527f7265000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b60038054829081106104e557fe5b90600052602060002090600a0201600301544210151561054f576040805160e560020a62461bcd02815260206004820152601e60248201527f4469766964656e642065787069727920697320696e2074686520706173740000604482015290519081900360640190fd5b600380548290811061055d57fe5b600091825260209091206008600a90920201015460ff16156105ef576040805160e560020a62461bcd02815260206004820152602560248201527f4469766964656e6420686173206265656e207265636c61696d6564206279206960448201527f7373756572000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b60038054849081106105fd57fe5b600091825260208083203384526009600a90930201918201905260409091205490925060ff1615610678576040805160e560020a62461bcd02815260206004820152601a60248201527f4469766964656e6420616c7265616479207265636c61696d6564000000000000604482015290519081900360640190fd5b61068333838561249f565b505050565b6000806000805160206126c3833981519152600080600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156106f057600080fd5b505af1158015610704573d6000803e3d6000fd5b505050506040513d602081101561071a57600080fd5b505160005433600160a060020a03928316811494509116149050818061073d5750805b806107e35750600154604080517f8658b8b9000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018690529051600160a060020a0390921691638658b8b9916064808201926020929091908290030181600087803b1580156107b657600080fd5b505af11580156107ca573d6000803e3d6000fd5b505050506040513d60208110156107e057600080fd5b50515b1515610839576040805160e560020a62461bcd02815260206004820152601760248201527f5065726d697373696f6e20636865636b206661696c6564000000000000000000604482015290519081900360640190fd5b60035487908110610882576040805160e560020a62461bcd02815260206004820152601860248201526000805160206126e3833981519152604482015290519081900360640190fd5b600380548290811061089057fe5b90600052602060002090600a0201600201544210151515610921576040805160e560020a62461bcd02815260206004820152602260248201527f4469766964656e64206d6174757269747920697320696e20746865206675747560448201527f7265000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600380548290811061092f57fe5b90600052602060002090600a02016003015442101515610999576040805160e560020a62461bcd02815260206004820152601e60248201527f4469766964656e642065787069727920697320696e2074686520706173740000604482015290519081900360640190fd5b60038054829081106109a757fe5b600091825260209091206008600a90920201015460ff1615610a39576040805160e560020a62461bcd02815260206004820152602560248201527f4469766964656e6420686173206265656e207265636c61696d6564206279206960448201527f7373756572000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b6003805489908110610a4757fe5b90600052602060002090600a02019550600094505b8651851015610ad2578560090160008887815181101515610a7957fe5b6020908102909101810151600160a060020a031682528101919091526040016000205460ff161515610ac757610ac78786815181101515610ab657fe5b90602001906020020151878a61249f565b600190940193610a5c565b5050505050505050565b6000806000600385815481101515610af057fe5b60009182526020808320600160a060020a03881684526009600a90930201918201905260409091205490925060ff1615610b2d5760009250610c4b565b60015460038054600160a060020a0390921691634ee2cd7e91879189908110610b5257fe5b90600052602060002090600a0201600001546040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050602060405180830381600087803b158015610bb657600080fd5b505af1158015610bca573d6000803e3d6000fd5b505050506040513d6020811015610be057600080fd5b505160038054919250610c489187908110610bf757fe5b90600052602060002090600a020160070154610c3c600388815481101515610c1b57fe5b90600052602060002090600a0201600501548461264790919063ffffffff16565b9063ffffffff61267616565b92505b505092915050565b606060008082815b600354831015610c9f5785600384815481101515610c7557fe5b90600052602060002090600a0201600001541415610c94576001909301925b600190920191610c5b565b83604051908082528060200260200182016040528015610cc9578160200160208202803883390190505b50915060009350600090505b600354811015610d2f5785600382815481101515610cef57fe5b90600052602060002090600a0201600001541415610d2757808285815181101515610d1657fe5b602090810290910101526001909301925b600101610cd5565b50949350505050565b60007f4645455f41444d494e0000000000000000000000000000000000000000000000600080600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015610db157600080fd5b505af1158015610dc5573d6000803e3d6000fd5b505050506040513d6020811015610ddb57600080fd5b505160005433600160a060020a039283168114945091161490508180610dfe5750805b80610ea45750600154604080517f8658b8b9000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018690529051600160a060020a0390921691638658b8b9916064808201926020929091908290030181600087803b158015610e7757600080fd5b505af1158015610e8b573d6000803e3d6000fd5b505050506040513d6020811015610ea157600080fd5b50515b1515610efa576040805160e560020a62461bcd02815260206004820152601760248201527f5065726d697373696f6e20636865636b206661696c6564000000000000000000604482015290519081900360640190fd5b60025460008054604080517f8da5cb5b0000000000000000000000000000000000000000000000000000000081529051600160a060020a03948516946323b872dd94309490911692638da5cb5b9260048083019360209383900390910190829087803b158015610f6957600080fd5b505af1158015610f7d573d6000803e3d6000fd5b505050506040513d6020811015610f9357600080fd5b50516040805160e060020a63ffffffff8616028152600160a060020a039384166004820152929091166024830152604482018990525160648083019260209291908290030181600087803b158015610fea57600080fd5b505af1158015610ffe573d6000803e3d6000fd5b505050506040513d602081101561101457600080fd5b5051151561106c576040805160e560020a62461bcd02815260206004820152601260248201527f556e61626c6520746f2074616b65206665650000000000000000000000000000604482015290519081900360640190fd5b506001949350505050565b600254600160a060020a031681565b6000806000600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156110de57600080fd5b505af11580156110f2573d6000803e3d6000fd5b505050506040513d602081101561110857600080fd5b5051600160a060020a03163314611169576040805160e560020a62461bcd02815260206004820152601360248201527f53656e646572206973206e6f74206f776e657200000000000000000000000000604482015290519081900360640190fd5b86861161117557600080fd5b42861161118157600080fd5b600160a060020a038516151561119657600080fd5b600084116111a357600080fd5b604080517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018690529051600160a060020a038716916323b872dd9160648083019260209291908290030181600087803b15801561121157600080fd5b505af1158015611225573d6000803e3d6000fd5b505050506040513d602081101561123b57600080fd5b505115156112b9576040805160e560020a62461bcd02815260206004820152602660248201527f556e61626c6520746f207472616e7366657220746f6b656e7320666f7220646960448201527f766964656e640000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600354600154604080517fff0b9c900000000000000000000000000000000000000000000000000000000081529051929550600160a060020a039091169163ff0b9c90916004808201926020929091908290030181600087803b15801561131f57600080fd5b505af1158015611333573d6000803e3d6000fd5b505050506040513d602081101561134957600080fd5b5051600154604080517f18160ddd0000000000000000000000000000000000000000000000000000000081529051929450600160a060020a03909116916318160ddd916004808201926020929091908290030181600087803b1580156113ae57600080fd5b505af11580156113c2573d6000803e3d6000fd5b505050506040513d60208110156113d857600080fd5b8101908080519060200190929190505050905060036101206040519081016040528084815260200142815260200189815260200188815260200187600160a060020a0316815260200186815260200160008152602001838152602001600015158152509080600181540180825580915050906001820390600052602060002090600a0201600090919290919091506000820151816000015560208201518160010155604082015181600201556060820151816003015560808201518160040160006101000a815481600160a060020a030219169083600160a060020a0316021790555060a0820151816005015560c0820151816006015560e082015181600701556101008201518160080160006101000a81548160ff02191690831515021790555050505033600160a060020a03167fb5d843cebbb7595af0860a94ddef15ce747f966392b0ab3705d48c5c08cf0c5583428a8a8a8a888b6040518089815260200188815260200187815260200186815260200185600160a060020a0316600160a060020a031681526020018481526020018381526020018281526020019850505050505050505060405180910390a250505050505050565b6000805160206126c383398151915281565b60038054829081106115b157fe5b60009182526020909120600a9091020180546001820154600283015460038401546004850154600586015460068701546007880154600890980154969850949693959294600160a060020a0390921693909260ff1689565b600080600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561165f57600080fd5b505af1158015611673573d6000803e3d6000fd5b505050506040513d602081101561168957600080fd5b5051600160a060020a031633146116ea576040805160e560020a62461bcd02815260206004820152601360248201527f53656e646572206973206e6f74206f776e657200000000000000000000000000604482015290519081900360640190fd5b6003548310611731576040805160e560020a62461bcd02815260206004820152601860248201526000805160206126e3833981519152604482015290519081900360640190fd5b600380548490811061173f57fe5b90600052602060002090600a02016003015442101515156117aa576040805160e560020a62461bcd02815260206004820181905260248201527f4469766964656e642065787069727920697320696e2074686520667574757265604482015290519081900360640190fd5b60038054849081106117b857fe5b600091825260209091206008600a90920201015460ff1615611824576040805160e560020a62461bcd02815260206004820152601860248201527f4469766964656e6420616c726561647920636c61696d65640000000000000000604482015290519081900360640190fd5b600160038481548110151561183557fe5b60009182526020909120600a90910201600801805460ff1916911515919091179055600380548490811061186557fe5b90600052602060002090600a020191506118908260060154836005015461268b90919063ffffffff16565b600480840154604080517fa9059cbb00000000000000000000000000000000000000000000000000000000815233938101939093526024830184905251929350600160a060020a03169163a9059cbb916044808201926020929091908290030181600087803b15801561190257600080fd5b505af1158015611916573d6000803e3d6000fd5b505050506040513d602081101561192c57600080fd5b50511515611984576040805160e560020a62461bcd02815260206004820152601960248201527f556e61626c6520746f207472616e7366657220746f6b656e7300000000000000604482015290519081900360640190fd5b600482015460408051858152600160a060020a039290921660208301528181018390525133917f9766d0325a2a3c017f6cf974bfd1bd0b26e705570ce8250fe5e078a3e832d52d919081900360600190a2505050565b600154600160a060020a031681565b604080516001808252818301909252606091829190602080830190803883390190505090506000805160206126c3833981519152816000815181101515611a2c57fe5b60209081029091010152905090565b600054600160a060020a031681565b600080600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015611aa057600080fd5b505af1158015611ab4573d6000803e3d6000fd5b505050506040513d6020811015611aca57600080fd5b5051600160a060020a03163314611b2b576040805160e560020a62461bcd02815260206004820152601360248201527f53656e646572206973206e6f74206f776e657200000000000000000000000000604482015290519081900360640190fd5b868611611b3757600080fd5b428611611b4357600080fd5b600160009054906101000a9004600160a060020a0316600160a060020a0316635488cc806040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015611b9657600080fd5b505af1158015611baa573d6000803e3d6000fd5b505050506040513d6020811015611bc057600080fd5b5051831115611bce57600080fd5b600354600154604080517f981b24d0000000000000000000000000000000000000000000000000000000008152600481018790529051929450600160a060020a039091169163981b24d0916024808201926020929091908290030181600087803b158015611c3b57600080fd5b505af1158015611c4f573d6000803e3d6000fd5b505050506040513d6020811015611c6557600080fd5b5051604080517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018790529051919250600160a060020a038716916323b872dd916064808201926020929091908290030181600087803b158015611cd957600080fd5b505af1158015611ced573d6000803e3d6000fd5b505050506040513d6020811015611d0357600080fd5b50511515611d81576040805160e560020a62461bcd02815260206004820152602660248201527f556e61626c6520746f207472616e7366657220746f6b656e7320666f7220646960448201527f766964656e640000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b60036101206040519081016040528085815260200142815260200189815260200188815260200187600160a060020a0316815260200186815260200160008152602001838152602001600015158152509080600181540180825580915050906001820390600052602060002090600a0201600090919290919091506000820151816000015560208201518160010155604082015181600201556060820151816003015560808201518160040160006101000a815481600160a060020a030219169083600160a060020a0316021790555060a0820151816005015560c0820151816006015560e082015181600701556101008201518160080160006101000a81548160ff02191690831515021790555050505033600160a060020a03167fb5d843cebbb7595af0860a94ddef15ce747f966392b0ab3705d48c5c08cf0c5584428a8a8a8a888a6040518089815260200188815260200187815260200186815260200185600160a060020a0316600160a060020a031681526020018481526020018381526020018281526020019850505050505050505060405180910390a250505050505050565b7f4645455f41444d494e000000000000000000000000000000000000000000000081565b6000806000806000805160206126c3833981519152600080600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015611fb657600080fd5b505af1158015611fca573d6000803e3d6000fd5b505050506040513d6020811015611fe057600080fd5b505160005433600160a060020a0392831681149450911614905081806120035750805b806120a95750600154604080517f8658b8b9000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018690529051600160a060020a0390921691638658b8b9916064808201926020929091908290030181600087803b15801561207c57600080fd5b505af1158015612090573d6000803e3d6000fd5b505050506040513d60208110156120a657600080fd5b50515b15156120ff576040805160e560020a62461bcd02815260206004820152601760248201527f5065726d697373696f6e20636865636b206661696c6564000000000000000000604482015290519081900360640190fd5b6003548a908110612148576040805160e560020a62461bcd02815260206004820152601860248201526000805160206126e3833981519152604482015290519081900360640190fd5b600380548290811061215657fe5b90600052602060002090600a02016002015442101515156121e7576040805160e560020a62461bcd02815260206004820152602260248201527f4469766964656e64206d6174757269747920697320696e20746865206675747560448201527f7265000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b60038054829081106121f557fe5b90600052602060002090600a0201600301544210151561225f576040805160e560020a62461bcd02815260206004820152601e60248201527f4469766964656e642065787069727920697320696e2074686520706173740000604482015290519081900360640190fd5b600380548290811061226d57fe5b600091825260209091206008600a90920201015460ff16156122ff576040805160e560020a62461bcd02815260206004820152602560248201527f4469766964656e6420686173206265656e207265636c61696d6564206279206960448201527f7373756572000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600380548c90811061230d57fe5b90600052602060002090600a02019750600160009054906101000a9004600160a060020a0316600160a060020a031663e3cc65e26040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561237057600080fd5b505af1158015612384573d6000803e3d6000fd5b505050506040513d602081101561239a57600080fd5b505196508995505b6123bb876123b68c8c63ffffffff61269d16565b6126aa565b86101561249257600154604080517f3feb5f2b000000000000000000000000000000000000000000000000000000008152600481018990529051600160a060020a0390921691633feb5f2b916024808201926020929091908290030181600087803b15801561242957600080fd5b505af115801561243d573d6000803e3d6000fd5b505050506040513d602081101561245357600080fd5b5051600160a060020a038116600090815260098a01602052604090205490955060ff1615156124875761248785898d61249f565b6001909501946123a2565b5050505050505050505050565b60006124ab8285610adc565b600160a060020a03851660009081526009850160205260409020805460ff1916600117905560068401549091506124e990829063ffffffff61269d16565b6006840155600081111561264157600480840154604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152600160a060020a0388811694820194909452602481018590529051929091169163a9059cbb916044808201926020929091908290030181600087803b15801561256c57600080fd5b505af1158015612580573d6000803e3d6000fd5b505050506040513d602081101561259657600080fd5b505115156125ee576040805160e560020a62461bcd02815260206004820152601960248201527f556e61626c6520746f207472616e7366657220746f6b656e7300000000000000604482015290519081900360640190fd5b600483015460408051848152600160a060020a0392831660208201528082018490529051918616917ff5ffd235949c0ad2967ecb39d7f97e8e12a3bd81f6c62d6c92c61d2b61543a179181900360600190a25b50505050565b600082151561265857506000612670565b5081810281838281151561266857fe5b041461267057fe5b92915050565b6000818381151561268357fe5b049392505050565b60008282111561269757fe5b50900390565b8181018281101561267057fe5b60008183106126b957816126bb565b825b939250505056004449535452494255544500000000000000000000000000000000000000000000496e636f7272656374206469766964656e6420696e6465780000000000000000a165627a7a72305820323b94b923db7149176947dca9be55c1d5f15ed5a92795edb64c981c322316ed00294372656174652061204552433230206469766964656e642077686963682077696c6c2062652070616964206f757420746f20746f6b656e20686f6c646572732070726f706f7274696f6e616c20746f2074686569722062616c616e6365732061742074686520706f696e7420746865206469766964656e642069732063726561746564a165627a7a7230582019b3829291f077706b9fa0c48910f8a519df0c5053a943ec0b601bd821eec4a40029",
  "deployedBytecode": "0x6080604052600436106100ef5763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166277436081146100f457806306184a251461013057806315dae03e1461015757806317d7de7c146101825780631a092541146101975780633ae192bd1461022157806358a191c31461023b5780636faa22a514610253578063715018a6146102685780637e363ffa1461027d5780638da5cb5b14610292578063995d9ab7146102a7578063aac67b051461030c578063d54c472614610324578063e0d5497014610339578063f2fde38b1461034e578063ff3c1a8f1461036f575b600080fd5b34801561010057600080fd5b506101146004803560248101910135610384565b60408051600160a060020a039092168252519081900360200190f35b34801561013c57600080fd5b50610145610545565b60408051918252519081900360200190f35b34801561016357600080fd5b5061016c61054b565b6040805160ff9092168252519081900360200190f35b34801561018e57600080fd5b50610145610550565b3480156101a357600080fd5b506101ac610574565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101e65781810151838201526020016101ce565b50505050905090810190601f1680156102135780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561022d57600080fd5b506102396004356105f9565b005b34801561024757600080fd5b50610239600435610656565b34801561025f57600080fd5b506101146106b3565b34801561027457600080fd5b506102396106c2565b34801561028957600080fd5b5061014561072e565b34801561029e57600080fd5b50610114610734565b3480156102b357600080fd5b506102bc610743565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156102f85781810151838201526020016102e0565b505050509050019250505060405180910390f35b34801561031857600080fd5b5061023960043561081d565b34801561033057600080fd5b5061014561087a565b34801561034557600080fd5b506101ac610880565b34801561035a57600080fd5b50610239600160a060020a03600435166108a1565b34801561037b57600080fd5b506101ac6108c4565b60008060025411156104f45760015460008054600254604080517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152600160a060020a03938416602482015260448101929092525191909316926323b872dd9260648083019360209390929083900390910190829087803b15801561040f57600080fd5b505af1158015610423573d6000803e3d6000fd5b505050506040513d602081101561043957600080fd5b505115156104f457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f4661696c6564207472616e7366657246726f6d2062656361757365206f66207360448201527f7566666963656e7420416c6c6f77616e6365206973206e6f742070726f76696460648201527f6564000000000000000000000000000000000000000000000000000000000000608482015290519081900360a40190fd5b6001543390600160a060020a031661050a610978565b600160a060020a03928316815291166020820152604080519182900301906000f08015801561053d573d6000803e3d6000fd5b509392505050565b60045481565b600490565b7f45524332304469766964656e64436865636b706f696e7400000000000000000090565b60408051608081018252604181527f437265617465204552433230206469766964656e647320666f7220746f6b656e60208201527f20686f6c64657273206174206120737065636966696320636865636b706f696e918101919091527f7400000000000000000000000000000000000000000000000000000000000000606082015290565b600054600160a060020a0316331461061057600080fd5b60045460408051918252602082018390523082820152517fc15ef5ae01a170635c048bc2ddb0e834fe5d866424709f0a7398496a80852ec89181900360600190a1600455565b600054600160a060020a0316331461066d57600080fd5b60025460408051918252602082018390523082820152517ff9c53ed8f7f318ac63991d13acab4cf653984ce56b7dc1b3a2083af3f412262d9181900360600190a1600255565b600154600160a060020a031681565b600054600160a060020a031633146106d957600080fd5b60008054604051600160a060020a03909116917ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482091a26000805473ffffffffffffffffffffffffffffffffffffffff19169055565b60025481565b600054600160a060020a031681565b604080516003808252608082019092526060918291906020820183803883390190505090507f455243323000000000000000000000000000000000000000000000000000000081600081518110151561079857fe5b6020908102909101015280517f4469766964656e6400000000000000000000000000000000000000000000000090829060019081106107d357fe5b6020908102909101015280517f436865636b706f696e7400000000000000000000000000000000000000000000908290600290811061080e57fe5b60209081029091010152905090565b600054600160a060020a0316331461083457600080fd5b60035460408051918252602082018390523082820152517fff5bf6a8d25c4e30ad5778be1e2a41c7c45173313279bcbba6e2bb1b1bf7a6db9181900360600190a1600355565b60035481565b606060c0604051908101604052806083815260200161312860839139905090565b600054600160a060020a031633146108b857600080fd5b6108c1816108fb565b50565b60408051808201909152601981527f4552433230204469766964656e6420436865636b706f696e7400000000000000602082015290565b600160a060020a038116151561091057600080fd5b60008054604051600160a060020a03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60405161279f80610989833901905600608060405234801561001057600080fd5b5060405160408061279f83398101604052805160209091015160018054600160a060020a03938416600160a060020a031991821617909155600080548216331790556002805493909216921691909117905561272e806100716000396000f3006080604052600436106100d75763ffffffff60e060020a6000350416631613ec9d81146100dc57806330008b48146101265780634d58e413146101405780635bea0e1c1461019a5780635daff64e146101d05780635f7619a4146102385780636faa22a51461026457806377bbf28a1461029557806380fef5af146102bf578063814b3fe0146102d4578063aa8b76ea1461033d578063b84dfbd214610355578063c3a07df61461036a578063c45a01551461037f578063cf3b98b214610394578063d70afa96146103b4578063e1726faa146103c9575b600080fd5b3480156100e857600080fd5b506100f16103e7565b604080517fffffffff000000000000000000000000000000000000000000000000000000009092168252519081900360200190f35b34801561013257600080fd5b5061013e6004356103ec565b005b34801561014c57600080fd5b5060408051602060046024803582810135848102808701860190975280865261013e968435963696604495919490910192918291850190849080828437509497506106889650505050505050565b3480156101a657600080fd5b506101be600435600160a060020a0360243516610adc565b60408051918252519081900360200190f35b3480156101dc57600080fd5b506101e8600435610c53565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561022457818101518382015260200161020c565b505050509050019250505060405180910390f35b34801561024457600080fd5b50610250600435610d38565b604080519115158252519081900360200190f35b34801561027057600080fd5b50610279611077565b60408051600160a060020a039092168252519081900360200190f35b3480156102a157600080fd5b5061013e600435602435600160a060020a0360443516606435611086565b3480156102cb57600080fd5b506101be611591565b3480156102e057600080fd5b506102ec6004356115a3565b60408051998a5260208a0198909852888801969096526060880194909452600160a060020a03909216608087015260a086015260c085015260e0840152151561010083015251908190036101200190f35b34801561034957600080fd5b5061013e600435611609565b34801561036157600080fd5b506102796119da565b34801561037657600080fd5b506101e86119e9565b34801561038b57600080fd5b50610279611a3b565b61013e600435602435600160a060020a0360443516606435608435611a4a565b3480156103c057600080fd5b506101be611f27565b3480156103d557600080fd5b5061013e600435602435604435611f4b565b600090565b60035460009082908110610438576040805160e560020a62461bcd02815260206004820152601860248201526000805160206126e3833981519152604482015290519081900360640190fd5b600380548290811061044657fe5b90600052602060002090600a02016002015442101515156104d7576040805160e560020a62461bcd02815260206004820152602260248201527f4469766964656e64206d6174757269747920697320696e20746865206675747560448201527f7265000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b60038054829081106104e557fe5b90600052602060002090600a0201600301544210151561054f576040805160e560020a62461bcd02815260206004820152601e60248201527f4469766964656e642065787069727920697320696e2074686520706173740000604482015290519081900360640190fd5b600380548290811061055d57fe5b600091825260209091206008600a90920201015460ff16156105ef576040805160e560020a62461bcd02815260206004820152602560248201527f4469766964656e6420686173206265656e207265636c61696d6564206279206960448201527f7373756572000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b60038054849081106105fd57fe5b600091825260208083203384526009600a90930201918201905260409091205490925060ff1615610678576040805160e560020a62461bcd02815260206004820152601a60248201527f4469766964656e6420616c7265616479207265636c61696d6564000000000000604482015290519081900360640190fd5b61068333838561249f565b505050565b6000806000805160206126c3833981519152600080600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156106f057600080fd5b505af1158015610704573d6000803e3d6000fd5b505050506040513d602081101561071a57600080fd5b505160005433600160a060020a03928316811494509116149050818061073d5750805b806107e35750600154604080517f8658b8b9000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018690529051600160a060020a0390921691638658b8b9916064808201926020929091908290030181600087803b1580156107b657600080fd5b505af11580156107ca573d6000803e3d6000fd5b505050506040513d60208110156107e057600080fd5b50515b1515610839576040805160e560020a62461bcd02815260206004820152601760248201527f5065726d697373696f6e20636865636b206661696c6564000000000000000000604482015290519081900360640190fd5b60035487908110610882576040805160e560020a62461bcd02815260206004820152601860248201526000805160206126e3833981519152604482015290519081900360640190fd5b600380548290811061089057fe5b90600052602060002090600a0201600201544210151515610921576040805160e560020a62461bcd02815260206004820152602260248201527f4469766964656e64206d6174757269747920697320696e20746865206675747560448201527f7265000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600380548290811061092f57fe5b90600052602060002090600a02016003015442101515610999576040805160e560020a62461bcd02815260206004820152601e60248201527f4469766964656e642065787069727920697320696e2074686520706173740000604482015290519081900360640190fd5b60038054829081106109a757fe5b600091825260209091206008600a90920201015460ff1615610a39576040805160e560020a62461bcd02815260206004820152602560248201527f4469766964656e6420686173206265656e207265636c61696d6564206279206960448201527f7373756572000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b6003805489908110610a4757fe5b90600052602060002090600a02019550600094505b8651851015610ad2578560090160008887815181101515610a7957fe5b6020908102909101810151600160a060020a031682528101919091526040016000205460ff161515610ac757610ac78786815181101515610ab657fe5b90602001906020020151878a61249f565b600190940193610a5c565b5050505050505050565b6000806000600385815481101515610af057fe5b60009182526020808320600160a060020a03881684526009600a90930201918201905260409091205490925060ff1615610b2d5760009250610c4b565b60015460038054600160a060020a0390921691634ee2cd7e91879189908110610b5257fe5b90600052602060002090600a0201600001546040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050602060405180830381600087803b158015610bb657600080fd5b505af1158015610bca573d6000803e3d6000fd5b505050506040513d6020811015610be057600080fd5b505160038054919250610c489187908110610bf757fe5b90600052602060002090600a020160070154610c3c600388815481101515610c1b57fe5b90600052602060002090600a0201600501548461264790919063ffffffff16565b9063ffffffff61267616565b92505b505092915050565b606060008082815b600354831015610c9f5785600384815481101515610c7557fe5b90600052602060002090600a0201600001541415610c94576001909301925b600190920191610c5b565b83604051908082528060200260200182016040528015610cc9578160200160208202803883390190505b50915060009350600090505b600354811015610d2f5785600382815481101515610cef57fe5b90600052602060002090600a0201600001541415610d2757808285815181101515610d1657fe5b602090810290910101526001909301925b600101610cd5565b50949350505050565b60007f4645455f41444d494e0000000000000000000000000000000000000000000000600080600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015610db157600080fd5b505af1158015610dc5573d6000803e3d6000fd5b505050506040513d6020811015610ddb57600080fd5b505160005433600160a060020a039283168114945091161490508180610dfe5750805b80610ea45750600154604080517f8658b8b9000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018690529051600160a060020a0390921691638658b8b9916064808201926020929091908290030181600087803b158015610e7757600080fd5b505af1158015610e8b573d6000803e3d6000fd5b505050506040513d6020811015610ea157600080fd5b50515b1515610efa576040805160e560020a62461bcd02815260206004820152601760248201527f5065726d697373696f6e20636865636b206661696c6564000000000000000000604482015290519081900360640190fd5b60025460008054604080517f8da5cb5b0000000000000000000000000000000000000000000000000000000081529051600160a060020a03948516946323b872dd94309490911692638da5cb5b9260048083019360209383900390910190829087803b158015610f6957600080fd5b505af1158015610f7d573d6000803e3d6000fd5b505050506040513d6020811015610f9357600080fd5b50516040805160e060020a63ffffffff8616028152600160a060020a039384166004820152929091166024830152604482018990525160648083019260209291908290030181600087803b158015610fea57600080fd5b505af1158015610ffe573d6000803e3d6000fd5b505050506040513d602081101561101457600080fd5b5051151561106c576040805160e560020a62461bcd02815260206004820152601260248201527f556e61626c6520746f2074616b65206665650000000000000000000000000000604482015290519081900360640190fd5b506001949350505050565b600254600160a060020a031681565b6000806000600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156110de57600080fd5b505af11580156110f2573d6000803e3d6000fd5b505050506040513d602081101561110857600080fd5b5051600160a060020a03163314611169576040805160e560020a62461bcd02815260206004820152601360248201527f53656e646572206973206e6f74206f776e657200000000000000000000000000604482015290519081900360640190fd5b86861161117557600080fd5b42861161118157600080fd5b600160a060020a038516151561119657600080fd5b600084116111a357600080fd5b604080517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018690529051600160a060020a038716916323b872dd9160648083019260209291908290030181600087803b15801561121157600080fd5b505af1158015611225573d6000803e3d6000fd5b505050506040513d602081101561123b57600080fd5b505115156112b9576040805160e560020a62461bcd02815260206004820152602660248201527f556e61626c6520746f207472616e7366657220746f6b656e7320666f7220646960448201527f766964656e640000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600354600154604080517fff0b9c900000000000000000000000000000000000000000000000000000000081529051929550600160a060020a039091169163ff0b9c90916004808201926020929091908290030181600087803b15801561131f57600080fd5b505af1158015611333573d6000803e3d6000fd5b505050506040513d602081101561134957600080fd5b5051600154604080517f18160ddd0000000000000000000000000000000000000000000000000000000081529051929450600160a060020a03909116916318160ddd916004808201926020929091908290030181600087803b1580156113ae57600080fd5b505af11580156113c2573d6000803e3d6000fd5b505050506040513d60208110156113d857600080fd5b8101908080519060200190929190505050905060036101206040519081016040528084815260200142815260200189815260200188815260200187600160a060020a0316815260200186815260200160008152602001838152602001600015158152509080600181540180825580915050906001820390600052602060002090600a0201600090919290919091506000820151816000015560208201518160010155604082015181600201556060820151816003015560808201518160040160006101000a815481600160a060020a030219169083600160a060020a0316021790555060a0820151816005015560c0820151816006015560e082015181600701556101008201518160080160006101000a81548160ff02191690831515021790555050505033600160a060020a03167fb5d843cebbb7595af0860a94ddef15ce747f966392b0ab3705d48c5c08cf0c5583428a8a8a8a888b6040518089815260200188815260200187815260200186815260200185600160a060020a0316600160a060020a031681526020018481526020018381526020018281526020019850505050505050505060405180910390a250505050505050565b6000805160206126c383398151915281565b60038054829081106115b157fe5b60009182526020909120600a9091020180546001820154600283015460038401546004850154600586015460068701546007880154600890980154969850949693959294600160a060020a0390921693909260ff1689565b600080600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561165f57600080fd5b505af1158015611673573d6000803e3d6000fd5b505050506040513d602081101561168957600080fd5b5051600160a060020a031633146116ea576040805160e560020a62461bcd02815260206004820152601360248201527f53656e646572206973206e6f74206f776e657200000000000000000000000000604482015290519081900360640190fd5b6003548310611731576040805160e560020a62461bcd02815260206004820152601860248201526000805160206126e3833981519152604482015290519081900360640190fd5b600380548490811061173f57fe5b90600052602060002090600a02016003015442101515156117aa576040805160e560020a62461bcd02815260206004820181905260248201527f4469766964656e642065787069727920697320696e2074686520667574757265604482015290519081900360640190fd5b60038054849081106117b857fe5b600091825260209091206008600a90920201015460ff1615611824576040805160e560020a62461bcd02815260206004820152601860248201527f4469766964656e6420616c726561647920636c61696d65640000000000000000604482015290519081900360640190fd5b600160038481548110151561183557fe5b60009182526020909120600a90910201600801805460ff1916911515919091179055600380548490811061186557fe5b90600052602060002090600a020191506118908260060154836005015461268b90919063ffffffff16565b600480840154604080517fa9059cbb00000000000000000000000000000000000000000000000000000000815233938101939093526024830184905251929350600160a060020a03169163a9059cbb916044808201926020929091908290030181600087803b15801561190257600080fd5b505af1158015611916573d6000803e3d6000fd5b505050506040513d602081101561192c57600080fd5b50511515611984576040805160e560020a62461bcd02815260206004820152601960248201527f556e61626c6520746f207472616e7366657220746f6b656e7300000000000000604482015290519081900360640190fd5b600482015460408051858152600160a060020a039290921660208301528181018390525133917f9766d0325a2a3c017f6cf974bfd1bd0b26e705570ce8250fe5e078a3e832d52d919081900360600190a2505050565b600154600160a060020a031681565b604080516001808252818301909252606091829190602080830190803883390190505090506000805160206126c3833981519152816000815181101515611a2c57fe5b60209081029091010152905090565b600054600160a060020a031681565b600080600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015611aa057600080fd5b505af1158015611ab4573d6000803e3d6000fd5b505050506040513d6020811015611aca57600080fd5b5051600160a060020a03163314611b2b576040805160e560020a62461bcd02815260206004820152601360248201527f53656e646572206973206e6f74206f776e657200000000000000000000000000604482015290519081900360640190fd5b868611611b3757600080fd5b428611611b4357600080fd5b600160009054906101000a9004600160a060020a0316600160a060020a0316635488cc806040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015611b9657600080fd5b505af1158015611baa573d6000803e3d6000fd5b505050506040513d6020811015611bc057600080fd5b5051831115611bce57600080fd5b600354600154604080517f981b24d0000000000000000000000000000000000000000000000000000000008152600481018790529051929450600160a060020a039091169163981b24d0916024808201926020929091908290030181600087803b158015611c3b57600080fd5b505af1158015611c4f573d6000803e3d6000fd5b505050506040513d6020811015611c6557600080fd5b5051604080517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018790529051919250600160a060020a038716916323b872dd916064808201926020929091908290030181600087803b158015611cd957600080fd5b505af1158015611ced573d6000803e3d6000fd5b505050506040513d6020811015611d0357600080fd5b50511515611d81576040805160e560020a62461bcd02815260206004820152602660248201527f556e61626c6520746f207472616e7366657220746f6b656e7320666f7220646960448201527f766964656e640000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b60036101206040519081016040528085815260200142815260200189815260200188815260200187600160a060020a0316815260200186815260200160008152602001838152602001600015158152509080600181540180825580915050906001820390600052602060002090600a0201600090919290919091506000820151816000015560208201518160010155604082015181600201556060820151816003015560808201518160040160006101000a815481600160a060020a030219169083600160a060020a0316021790555060a0820151816005015560c0820151816006015560e082015181600701556101008201518160080160006101000a81548160ff02191690831515021790555050505033600160a060020a03167fb5d843cebbb7595af0860a94ddef15ce747f966392b0ab3705d48c5c08cf0c5584428a8a8a8a888a6040518089815260200188815260200187815260200186815260200185600160a060020a0316600160a060020a031681526020018481526020018381526020018281526020019850505050505050505060405180910390a250505050505050565b7f4645455f41444d494e000000000000000000000000000000000000000000000081565b6000806000806000805160206126c3833981519152600080600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015611fb657600080fd5b505af1158015611fca573d6000803e3d6000fd5b505050506040513d6020811015611fe057600080fd5b505160005433600160a060020a0392831681149450911614905081806120035750805b806120a95750600154604080517f8658b8b9000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018690529051600160a060020a0390921691638658b8b9916064808201926020929091908290030181600087803b15801561207c57600080fd5b505af1158015612090573d6000803e3d6000fd5b505050506040513d60208110156120a657600080fd5b50515b15156120ff576040805160e560020a62461bcd02815260206004820152601760248201527f5065726d697373696f6e20636865636b206661696c6564000000000000000000604482015290519081900360640190fd5b6003548a908110612148576040805160e560020a62461bcd02815260206004820152601860248201526000805160206126e3833981519152604482015290519081900360640190fd5b600380548290811061215657fe5b90600052602060002090600a02016002015442101515156121e7576040805160e560020a62461bcd02815260206004820152602260248201527f4469766964656e64206d6174757269747920697320696e20746865206675747560448201527f7265000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b60038054829081106121f557fe5b90600052602060002090600a0201600301544210151561225f576040805160e560020a62461bcd02815260206004820152601e60248201527f4469766964656e642065787069727920697320696e2074686520706173740000604482015290519081900360640190fd5b600380548290811061226d57fe5b600091825260209091206008600a90920201015460ff16156122ff576040805160e560020a62461bcd02815260206004820152602560248201527f4469766964656e6420686173206265656e207265636c61696d6564206279206960448201527f7373756572000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600380548c90811061230d57fe5b90600052602060002090600a02019750600160009054906101000a9004600160a060020a0316600160a060020a031663e3cc65e26040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561237057600080fd5b505af1158015612384573d6000803e3d6000fd5b505050506040513d602081101561239a57600080fd5b505196508995505b6123bb876123b68c8c63ffffffff61269d16565b6126aa565b86101561249257600154604080517f3feb5f2b000000000000000000000000000000000000000000000000000000008152600481018990529051600160a060020a0390921691633feb5f2b916024808201926020929091908290030181600087803b15801561242957600080fd5b505af115801561243d573d6000803e3d6000fd5b505050506040513d602081101561245357600080fd5b5051600160a060020a038116600090815260098a01602052604090205490955060ff1615156124875761248785898d61249f565b6001909501946123a2565b5050505050505050505050565b60006124ab8285610adc565b600160a060020a03851660009081526009850160205260409020805460ff1916600117905560068401549091506124e990829063ffffffff61269d16565b6006840155600081111561264157600480840154604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152600160a060020a0388811694820194909452602481018590529051929091169163a9059cbb916044808201926020929091908290030181600087803b15801561256c57600080fd5b505af1158015612580573d6000803e3d6000fd5b505050506040513d602081101561259657600080fd5b505115156125ee576040805160e560020a62461bcd02815260206004820152601960248201527f556e61626c6520746f207472616e7366657220746f6b656e7300000000000000604482015290519081900360640190fd5b600483015460408051848152600160a060020a0392831660208201528082018490529051918616917ff5ffd235949c0ad2967ecb39d7f97e8e12a3bd81f6c62d6c92c61d2b61543a179181900360600190a25b50505050565b600082151561265857506000612670565b5081810281838281151561266857fe5b041461267057fe5b92915050565b6000818381151561268357fe5b049392505050565b60008282111561269757fe5b50900390565b8181018281101561267057fe5b60008183106126b957816126bb565b825b939250505056004449535452494255544500000000000000000000000000000000000000000000496e636f7272656374206469766964656e6420696e6465780000000000000000a165627a7a72305820323b94b923db7149176947dca9be55c1d5f15ed5a92795edb64c981c322316ed00294372656174652061204552433230206469766964656e642077686963682077696c6c2062652070616964206f757420746f20746f6b656e20686f6c646572732070726f706f7274696f6e616c20746f2074686569722062616c616e6365732061742074686520706f696e7420746865206469766964656e642069732063726561746564a165627a7a7230582019b3829291f077706b9fa0c48910f8a519df0c5053a943ec0b601bd821eec4a40029",
  "sourceMap": "184:2310:30:-;;;508:197;8:9:-1;5:2;;;30:1;27;20:12;5:2;508:197:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;184:2310:30;;;;;;",
  "deployedSourceMap": "184:2310:30:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;847:325;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;847:325:30;;;;;;;;;;;;;;;;-1:-1:-1;;;;;847:325:30;;;;;;;;;;;;;;363:38:14;;8:9:-1;5:2;;;30:1;27;20:12;5:2;363:38:14;;;;;;;;;;;;;;;;;;;;1236:71:30;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1236:71:30;;;;;;;;;;;;;;;;;;;;;;;1371:97;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1371:97:30;;;;1539:145;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1539:145:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;1539:145:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;;;2230:262:30;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2230:262:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;2230:262:30;;;;;;;;;;;;;;;;;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;;;;1938:212:30;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1938:212:30;;;;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;;;;;1749:100:30;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1749:100:30;;;;847:325;899:7;934:1;922:9;;:13;918:162;;;957:9;;;992:5;;999:9;;957:52;;;;;;980:10;957:52;;;;-1:-1:-1;;;;;992:5:30;;;957:52;;;;;;;;;;;;:9;;;;;:22;;:52;;;;;;;;;;;;;;;;;;;:9;:52;;;5:2:-1;;;;30:1;27;20:12;5:2;957:52:30;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;957:52:30;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;957:52:30;949:131;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1153:9;;1133:10;;-1:-1:-1;;;;;1153:9:30;1105:59;;:::i;:::-;-1:-1:-1;;;;;1105:59:30;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1105:59:30;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;1090:75:30;847:325;-1:-1:-1;;;847:325:30:o;363:38:14:-;;;;:::o;1236:71:30:-;1299:1;1236:71;:::o;1371:97::-;1429:32;1371:97;:::o;1539:145::-;1603:74;;;;;;;;;;;;;;;;;;;;;;;;;1585:6;1603:74;;;1539: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;2230:262:30:-;2323:16;;;2337:1;2323:16;;;;;;;;;2269:9;;;;2323:16;;;;2269:9;;105:10:-1;2323:16:30;88:34:-1;136:17;;-1:-1;2323:16:30;2290:49;;2349:26;:13;2363:1;2349:16;;;;;;;;;;;;;;;;;;:26;2385:16;;:29;;:13;;2399:1;;2385:16;;;;;;;;;;;;;;:29;2424:16;;:31;;:13;;2438:1;;2424:16;;;;;;;;;;;;;;:31;2472:13;-1:-1:-1;2230:262:30;:::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;1938:212:30:-;1985:6;2003:140;;;;;;;;;;;;;;;;;;;;1938:212;:::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;1749:100:30:-;1808:34;;;;;;;;;;;;;;;;;1749:100;:::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;184:2310:30:-;;;;;;;;;;:::o",
  "source": "pragma solidity ^0.4.24;\n\nimport \"./ERC20DividendCheckpoint.sol\";\nimport \"../../interfaces/IModuleFactory.sol\";\n\n/**\n * @title Factory for deploying ERC20DividendCheckpoint module\n */\ncontract ERC20DividendCheckpointFactory is IModuleFactory {\n\n    /**\n     * @notice Constructor\n     * @param _polyAddress Address of the polytoken\n     * @param _setupCost Setup cost of the module\n     * @param _usageCost Usage cost of the module\n     * @param _subscriptionCost Subscription cost of the module\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        return address(new ERC20DividendCheckpoint(msg.sender, address(polyToken)));\n    }\n\n    /**\n     * @notice Type of the Module factory\n     */\n    function getType() public view returns(uint8) {\n        return 4;\n    }\n\n    /**\n     * @notice Get the name of the Module\n     */\n    function getName() public view returns(bytes32) {\n        return \"ERC20DividendCheckpoint\";\n    }\n\n    /**\n     * @notice Get the description of the Module\n     */\n    function getDescription() public view returns(string) {\n        return \"Create ERC20 dividends for token holders at a specific checkpoint\";\n    }\n\n    /**\n     * @notice Get the title of the Module\n     */\n    function getTitle() public  view returns(string) {\n        return \"ERC20 Dividend Checkpoint\";\n    }\n\n    /**\n     * @notice Get the Instructions that helped to used the module\n     */\n    function getInstructions() public view returns(string) {\n        return \"Create a ERC20 dividend which will be paid out to token holders proportional to their balances at the point the dividend is created\";\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[](3);\n        availableTags[0] = \"ERC20\";\n        availableTags[1] = \"Dividend\";\n        availableTags[2] = \"Checkpoint\";\n        return availableTags;\n    }\n}\n",
  "sourcePath": "/Users/satyamagrawal/Repositories/testing-package/polymath-core/contracts/modules/Checkpoint/ERC20DividendCheckpointFactory.sol",
  "ast": {
    "absolutePath": "/Users/satyamagrawal/Repositories/testing-package/polymath-core/contracts/modules/Checkpoint/ERC20DividendCheckpointFactory.sol",
    "exportedSymbols": {
      "ERC20DividendCheckpointFactory": [
        12052
      ]
    },
    "id": 12053,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 11918,
        "literals": [
          "solidity",
          "^",
          "0.4",
          ".24"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:24:30"
      },
      {
        "absolutePath": "/Users/satyamagrawal/Repositories/testing-package/polymath-core/contracts/modules/Checkpoint/ERC20DividendCheckpoint.sol",
        "file": "./ERC20DividendCheckpoint.sol",
        "id": 11919,
        "nodeType": "ImportDirective",
        "scope": 12053,
        "sourceUnit": 11917,
        "src": "26:39:30",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/satyamagrawal/Repositories/testing-package/polymath-core/contracts/interfaces/IModuleFactory.sol",
        "file": "../../interfaces/IModuleFactory.sol",
        "id": 11920,
        "nodeType": "ImportDirective",
        "scope": 12053,
        "sourceUnit": 9955,
        "src": "66:45:30",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 11921,
              "name": "IModuleFactory",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 9954,
              "src": "227:14:30",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IModuleFactory_$9954",
                "typeString": "contract IModuleFactory"
              }
            },
            "id": 11922,
            "nodeType": "InheritanceSpecifier",
            "src": "227:14:30"
          }
        ],
        "contractDependencies": [
          9954,
          11916,
          22664
        ],
        "contractKind": "contract",
        "documentation": "@title Factory for deploying ERC20DividendCheckpoint module",
        "fullyImplemented": true,
        "id": 12052,
        "linearizedBaseContracts": [
          12052,
          9954,
          22664
        ],
        "name": "ERC20DividendCheckpointFactory",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": {
              "id": 11939,
              "nodeType": "Block",
              "src": "697:8:30",
              "statements": []
            },
            "documentation": "@notice Constructor\n@param _polyAddress Address of the polytoken\n@param _setupCost Setup cost of the module\n@param _usageCost Usage cost of the module\n@param _subscriptionCost Subscription cost of the module",
            "id": 11940,
            "implemented": true,
            "isConstructor": true,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 11933,
                    "name": "_polyAddress",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 11924,
                    "src": "636:12:30",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 11934,
                    "name": "_setupCost",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 11926,
                    "src": "650:10:30",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 11935,
                    "name": "_usageCost",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 11928,
                    "src": "662:10:30",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 11936,
                    "name": "_subscriptionCost",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 11930,
                    "src": "674:17:30",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                ],
                "id": 11937,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 11932,
                  "name": "IModuleFactory",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9954,
                  "src": "621:14:30",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_IModuleFactory_$9954_$",
                    "typeString": "type(contract IModuleFactory)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "621:71:30"
              }
            ],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 11931,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11924,
                  "name": "_polyAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 11940,
                  "src": "521:20:30",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 11923,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "521:7:30",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 11926,
                  "name": "_setupCost",
                  "nodeType": "VariableDeclaration",
                  "scope": 11940,
                  "src": "543:18:30",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 11925,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "543:7:30",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 11928,
                  "name": "_usageCost",
                  "nodeType": "VariableDeclaration",
                  "scope": 11940,
                  "src": "563:18:30",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 11927,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "563:7:30",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 11930,
                  "name": "_subscriptionCost",
                  "nodeType": "VariableDeclaration",
                  "scope": 11940,
                  "src": "583:25:30",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 11929,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "583:7:30",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "520:89:30"
            },
            "payable": false,
            "returnParameters": {
              "id": 11938,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "697:0:30"
            },
            "scope": 12052,
            "src": "508:197:30",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 11973,
              "nodeType": "Block",
              "src": "908:264:30",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 11949,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 11947,
                      "name": "setupCost",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9727,
                      "src": "922:9:30",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 11948,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "934:1:30",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "922:13:30",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 11961,
                  "nodeType": "IfStatement",
                  "src": "918:162:30",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 11953,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 23131,
                                "src": "980:3:30",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 11954,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "980:10:30",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 11955,
                              "name": "owner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 22582,
                              "src": "992:5:30",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 11956,
                              "name": "setupCost",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9727,
                              "src": "999:9:30",
                              "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": 11951,
                              "name": "polyToken",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9725,
                              "src": "957:9:30",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ERC20_$22837",
                                "typeString": "contract ERC20"
                              }
                            },
                            "id": 11952,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "transferFrom",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 22819,
                            "src": "957:22:30",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$",
                              "typeString": "function (address,address,uint256) external returns (bool)"
                            }
                          },
                          "id": 11957,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "957:52:30",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "hexValue": "4661696c6564207472616e7366657246726f6d2062656361757365206f6620737566666963656e7420416c6c6f77616e6365206973206e6f742070726f7669646564",
                          "id": 11958,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "string",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "1011:68:30",
                          "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": 11950,
                        "name": "require",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [
                          23134,
                          23135
                        ],
                        "referencedDeclaration": 23135,
                        "src": "949:7:30",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                          "typeString": "function (bool,string memory) pure"
                        }
                      },
                      "id": 11959,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "949:131:30",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 11960,
                    "nodeType": "ExpressionStatement",
                    "src": "949:131:30"
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 11965,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 23131,
                              "src": "1133:3:30",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 11966,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "1133:10:30",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 11968,
                                "name": "polyToken",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9725,
                                "src": "1153:9:30",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_ERC20_$22837",
                                  "typeString": "contract ERC20"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_ERC20_$22837",
                                  "typeString": "contract ERC20"
                                }
                              ],
                              "id": 11967,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "1145:7:30",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": "address"
                            },
                            "id": 11969,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1145:18:30",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 11964,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "NewExpression",
                          "src": "1105:27:30",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_creation_nonpayable$_t_address_$_t_address_$returns$_t_contract$_ERC20DividendCheckpoint_$11916_$",
                            "typeString": "function (address,address) returns (contract ERC20DividendCheckpoint)"
                          },
                          "typeName": {
                            "contractScope": null,
                            "id": 11963,
                            "name": "ERC20DividendCheckpoint",
                            "nodeType": "UserDefinedTypeName",
                            "referencedDeclaration": 11916,
                            "src": "1109:23:30",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ERC20DividendCheckpoint_$11916",
                              "typeString": "contract ERC20DividendCheckpoint"
                            }
                          }
                        },
                        "id": 11970,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1105:59:30",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20DividendCheckpoint_$11916",
                          "typeString": "contract ERC20DividendCheckpoint"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_ERC20DividendCheckpoint_$11916",
                          "typeString": "contract ERC20DividendCheckpoint"
                        }
                      ],
                      "id": 11962,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "1097:7:30",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": "address"
                    },
                    "id": 11971,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1097:68:30",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 11946,
                  "id": 11972,
                  "nodeType": "Return",
                  "src": "1090:75:30"
                }
              ]
            },
            "documentation": "@notice used to launch the Module with the help of factory\n@return address Contract address of the Module",
            "id": 11974,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "deploy",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 11943,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11942,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 11974,
                  "src": "863:5:30",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 11941,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "863:5:30",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "862:19:30"
            },
            "payable": false,
            "returnParameters": {
              "id": 11946,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11945,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 11974,
                  "src": "899:7:30",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 11944,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "899:7:30",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "898:9:30"
            },
            "scope": 12052,
            "src": "847:325:30",
            "stateMutability": "nonpayable",
            "superFunction": 9804,
            "visibility": "external"
          },
          {
            "body": {
              "id": 11981,
              "nodeType": "Block",
              "src": "1282:25:30",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "34",
                    "id": 11979,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1299:1:30",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_4_by_1",
                      "typeString": "int_const 4"
                    },
                    "value": "4"
                  },
                  "functionReturnParameters": 11978,
                  "id": 11980,
                  "nodeType": "Return",
                  "src": "1292:8:30"
                }
              ]
            },
            "documentation": "@notice Type of the Module factory",
            "id": 11982,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getType",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 11975,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1252:2:30"
            },
            "payable": false,
            "returnParameters": {
              "id": 11978,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11977,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 11982,
                  "src": "1275:5:30",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 11976,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "1275:5:30",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1274:7:30"
            },
            "scope": 12052,
            "src": "1236:71:30",
            "stateMutability": "view",
            "superFunction": 9809,
            "visibility": "public"
          },
          {
            "body": {
              "id": 11989,
              "nodeType": "Block",
              "src": "1419:49:30",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "45524332304469766964656e64436865636b706f696e74",
                    "id": 11987,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1436:25:30",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_43a5b74867058c4df92f68435161a1dfbed27e19f157b1bfa3354f437110895e",
                      "typeString": "literal_string \"ERC20DividendCheckpoint\""
                    },
                    "value": "ERC20DividendCheckpoint"
                  },
                  "functionReturnParameters": 11986,
                  "id": 11988,
                  "nodeType": "Return",
                  "src": "1429:32:30"
                }
              ]
            },
            "documentation": "@notice Get the name of the Module",
            "id": 11990,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getName",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 11983,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1387:2:30"
            },
            "payable": false,
            "returnParameters": {
              "id": 11986,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11985,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 11990,
                  "src": "1410:7:30",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 11984,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1410:7:30",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1409:9:30"
            },
            "scope": 12052,
            "src": "1371:97:30",
            "stateMutability": "view",
            "superFunction": 9814,
            "visibility": "public"
          },
          {
            "body": {
              "id": 11997,
              "nodeType": "Block",
              "src": "1593:91:30",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "437265617465204552433230206469766964656e647320666f7220746f6b656e20686f6c64657273206174206120737065636966696320636865636b706f696e74",
                    "id": 11995,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1610:67:30",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_71f7be4d992b8c004e23a6d67b366e42e8a5bd86d343609f4b48c8d380984131",
                      "typeString": "literal_string \"Create ERC20 dividends for token holders at a specific checkpoint\""
                    },
                    "value": "Create ERC20 dividends for token holders at a specific checkpoint"
                  },
                  "functionReturnParameters": 11994,
                  "id": 11996,
                  "nodeType": "Return",
                  "src": "1603:74:30"
                }
              ]
            },
            "documentation": "@notice Get the description of the Module",
            "id": 11998,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getDescription",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 11991,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1562:2:30"
            },
            "payable": false,
            "returnParameters": {
              "id": 11994,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11993,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 11998,
                  "src": "1585:6:30",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 11992,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1585:6:30",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1584:8:30"
            },
            "scope": 12052,
            "src": "1539:145:30",
            "stateMutability": "view",
            "superFunction": 9819,
            "visibility": "public"
          },
          {
            "body": {
              "id": 12005,
              "nodeType": "Block",
              "src": "1798:51:30",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "4552433230204469766964656e6420436865636b706f696e74",
                    "id": 12003,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1815:27:30",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_86f436467e808c19a5f3790976e07b8a17d9bab002d90fbe3005bf6dc44f6093",
                      "typeString": "literal_string \"ERC20 Dividend Checkpoint\""
                    },
                    "value": "ERC20 Dividend Checkpoint"
                  },
                  "functionReturnParameters": 12002,
                  "id": 12004,
                  "nodeType": "Return",
                  "src": "1808:34:30"
                }
              ]
            },
            "documentation": "@notice Get the title of the Module",
            "id": 12006,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getTitle",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 11999,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1766:2:30"
            },
            "payable": false,
            "returnParameters": {
              "id": 12002,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12001,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 12006,
                  "src": "1790:6:30",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 12000,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1790:6:30",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1789:8:30"
            },
            "scope": 12052,
            "src": "1749:100:30",
            "stateMutability": "view",
            "superFunction": 9824,
            "visibility": "public"
          },
          {
            "body": {
              "id": 12013,
              "nodeType": "Block",
              "src": "1993:157:30",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "4372656174652061204552433230206469766964656e642077686963682077696c6c2062652070616964206f757420746f20746f6b656e20686f6c646572732070726f706f7274696f6e616c20746f2074686569722062616c616e6365732061742074686520706f696e7420746865206469766964656e642069732063726561746564",
                    "id": 12011,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "2010:133:30",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_76cef9727525be44d266fc7a1d4ff6c53a3c01e9260c766de0b9297357bf050e",
                      "typeString": "literal_string \"Create a ERC20 dividend which will be paid out to token holders proportional to their balances at the point the dividend is created\""
                    },
                    "value": "Create a ERC20 dividend which will be paid out to token holders proportional to their balances at the point the dividend is created"
                  },
                  "functionReturnParameters": 12010,
                  "id": 12012,
                  "nodeType": "Return",
                  "src": "2003:140:30"
                }
              ]
            },
            "documentation": "@notice Get the Instructions that helped to used the module",
            "id": 12014,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getInstructions",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 12007,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1962:2:30"
            },
            "payable": false,
            "returnParameters": {
              "id": 12010,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12009,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 12014,
                  "src": "1985:6:30",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 12008,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1985:6:30",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1984:8:30"
            },
            "scope": 12052,
            "src": "1938:212:30",
            "stateMutability": "view",
            "superFunction": 9829,
            "visibility": "public"
          },
          {
            "body": {
              "id": 12050,
              "nodeType": "Block",
              "src": "2280:212:30",
              "statements": [
                {
                  "assignments": [
                    12023
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 12023,
                      "name": "availableTags",
                      "nodeType": "VariableDeclaration",
                      "scope": 12051,
                      "src": "2290:30:30",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                        "typeString": "bytes32[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 12021,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "2290:7:30",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 12022,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "2290:9:30",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                          "typeString": "bytes32[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 12029,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "33",
                        "id": 12027,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2337:1:30",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_3_by_1",
                          "typeString": "int_const 3"
                        },
                        "value": "3"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_rational_3_by_1",
                          "typeString": "int_const 3"
                        }
                      ],
                      "id": 12026,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "2323:13:30",
                      "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": 12024,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "2327:7:30",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 12025,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "2327:9:30",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                          "typeString": "bytes32[]"
                        }
                      }
                    },
                    "id": 12028,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2323:16:30",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_memory",
                      "typeString": "bytes32[] memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2290:49:30"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 12034,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 12030,
                        "name": "availableTags",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12023,
                        "src": "2349:13:30",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                          "typeString": "bytes32[] memory"
                        }
                      },
                      "id": 12032,
                      "indexExpression": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 12031,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2363:1:30",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "2349:16:30",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "4552433230",
                      "id": 12033,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "string",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2368:7:30",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_stringliteral_8ae85d849167ff996c04040c44924fd364217285e4cad818292c7ac37c0a345b",
                        "typeString": "literal_string \"ERC20\""
                      },
                      "value": "ERC20"
                    },
                    "src": "2349:26:30",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 12035,
                  "nodeType": "ExpressionStatement",
                  "src": "2349:26:30"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 12040,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 12036,
                        "name": "availableTags",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12023,
                        "src": "2385:13:30",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                          "typeString": "bytes32[] memory"
                        }
                      },
                      "id": 12038,
                      "indexExpression": {
                        "argumentTypes": null,
                        "hexValue": "31",
                        "id": 12037,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2399:1:30",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "2385:16:30",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "4469766964656e64",
                      "id": 12039,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "string",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2404:10:30",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_stringliteral_1a89444c0f8c4f319a738fad464c92de56f318730368af8f54e4977fa8c6d063",
                        "typeString": "literal_string \"Dividend\""
                      },
                      "value": "Dividend"
                    },
                    "src": "2385:29:30",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 12041,
                  "nodeType": "ExpressionStatement",
                  "src": "2385:29:30"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 12046,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 12042,
                        "name": "availableTags",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12023,
                        "src": "2424:13:30",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                          "typeString": "bytes32[] memory"
                        }
                      },
                      "id": 12044,
                      "indexExpression": {
                        "argumentTypes": null,
                        "hexValue": "32",
                        "id": 12043,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2438:1:30",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_2_by_1",
                          "typeString": "int_const 2"
                        },
                        "value": "2"
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "2424:16:30",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "436865636b706f696e74",
                      "id": 12045,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "string",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2443:12:30",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_stringliteral_3b8e9053b7ff4161ec05d93ad47701603857e890455cc4e7489597c5341a50ae",
                        "typeString": "literal_string \"Checkpoint\""
                      },
                      "value": "Checkpoint"
                    },
                    "src": "2424:31:30",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 12047,
                  "nodeType": "ExpressionStatement",
                  "src": "2424:31:30"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 12048,
                    "name": "availableTags",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 12023,
                    "src": "2472:13:30",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                      "typeString": "bytes32[] memory"
                    }
                  },
                  "functionReturnParameters": 12019,
                  "id": 12049,
                  "nodeType": "Return",
                  "src": "2465:20:30"
                }
              ]
            },
            "documentation": "@notice Get the tags related to the module factory",
            "id": 12051,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getTags",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 12015,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2246:2:30"
            },
            "payable": false,
            "returnParameters": {
              "id": 12019,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12018,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 12051,
                  "src": "2269:9:30",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                    "typeString": "bytes32[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 12016,
                      "name": "bytes32",
                      "nodeType": "ElementaryTypeName",
                      "src": "2269:7:30",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "id": 12017,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "2269:9:30",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                      "typeString": "bytes32[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2268:11:30"
            },
            "scope": 12052,
            "src": "2230:262:30",
            "stateMutability": "view",
            "superFunction": 9835,
            "visibility": "public"
          }
        ],
        "scope": 12053,
        "src": "184:2310:30"
      }
    ],
    "src": "0:2495:30"
  },
  "legacyAST": {
    "absolutePath": "/Users/satyamagrawal/Repositories/testing-package/polymath-core/contracts/modules/Checkpoint/ERC20DividendCheckpointFactory.sol",
    "exportedSymbols": {
      "ERC20DividendCheckpointFactory": [
        12052
      ]
    },
    "id": 12053,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 11918,
        "literals": [
          "solidity",
          "^",
          "0.4",
          ".24"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:24:30"
      },
      {
        "absolutePath": "/Users/satyamagrawal/Repositories/testing-package/polymath-core/contracts/modules/Checkpoint/ERC20DividendCheckpoint.sol",
        "file": "./ERC20DividendCheckpoint.sol",
        "id": 11919,
        "nodeType": "ImportDirective",
        "scope": 12053,
        "sourceUnit": 11917,
        "src": "26:39:30",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/satyamagrawal/Repositories/testing-package/polymath-core/contracts/interfaces/IModuleFactory.sol",
        "file": "../../interfaces/IModuleFactory.sol",
        "id": 11920,
        "nodeType": "ImportDirective",
        "scope": 12053,
        "sourceUnit": 9955,
        "src": "66:45:30",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 11921,
              "name": "IModuleFactory",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 9954,
              "src": "227:14:30",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IModuleFactory_$9954",
                "typeString": "contract IModuleFactory"
              }
            },
            "id": 11922,
            "nodeType": "InheritanceSpecifier",
            "src": "227:14:30"
          }
        ],
        "contractDependencies": [
          9954,
          11916,
          22664
        ],
        "contractKind": "contract",
        "documentation": "@title Factory for deploying ERC20DividendCheckpoint module",
        "fullyImplemented": true,
        "id": 12052,
        "linearizedBaseContracts": [
          12052,
          9954,
          22664
        ],
        "name": "ERC20DividendCheckpointFactory",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": {
              "id": 11939,
              "nodeType": "Block",
              "src": "697:8:30",
              "statements": []
            },
            "documentation": "@notice Constructor\n@param _polyAddress Address of the polytoken\n@param _setupCost Setup cost of the module\n@param _usageCost Usage cost of the module\n@param _subscriptionCost Subscription cost of the module",
            "id": 11940,
            "implemented": true,
            "isConstructor": true,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 11933,
                    "name": "_polyAddress",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 11924,
                    "src": "636:12:30",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 11934,
                    "name": "_setupCost",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 11926,
                    "src": "650:10:30",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 11935,
                    "name": "_usageCost",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 11928,
                    "src": "662:10:30",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 11936,
                    "name": "_subscriptionCost",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 11930,
                    "src": "674:17:30",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                ],
                "id": 11937,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 11932,
                  "name": "IModuleFactory",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9954,
                  "src": "621:14:30",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_IModuleFactory_$9954_$",
                    "typeString": "type(contract IModuleFactory)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "621:71:30"
              }
            ],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 11931,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11924,
                  "name": "_polyAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 11940,
                  "src": "521:20:30",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 11923,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "521:7:30",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 11926,
                  "name": "_setupCost",
                  "nodeType": "VariableDeclaration",
                  "scope": 11940,
                  "src": "543:18:30",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 11925,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "543:7:30",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 11928,
                  "name": "_usageCost",
                  "nodeType": "VariableDeclaration",
                  "scope": 11940,
                  "src": "563:18:30",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 11927,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "563:7:30",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 11930,
                  "name": "_subscriptionCost",
                  "nodeType": "VariableDeclaration",
                  "scope": 11940,
                  "src": "583:25:30",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 11929,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "583:7:30",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "520:89:30"
            },
            "payable": false,
            "returnParameters": {
              "id": 11938,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "697:0:30"
            },
            "scope": 12052,
            "src": "508:197:30",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 11973,
              "nodeType": "Block",
              "src": "908:264:30",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 11949,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 11947,
                      "name": "setupCost",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9727,
                      "src": "922:9:30",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 11948,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "934:1:30",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "922:13:30",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 11961,
                  "nodeType": "IfStatement",
                  "src": "918:162:30",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 11953,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 23131,
                                "src": "980:3:30",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 11954,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "980:10:30",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 11955,
                              "name": "owner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 22582,
                              "src": "992:5:30",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 11956,
                              "name": "setupCost",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9727,
                              "src": "999:9:30",
                              "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": 11951,
                              "name": "polyToken",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9725,
                              "src": "957:9:30",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ERC20_$22837",
                                "typeString": "contract ERC20"
                              }
                            },
                            "id": 11952,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "transferFrom",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 22819,
                            "src": "957:22:30",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$",
                              "typeString": "function (address,address,uint256) external returns (bool)"
                            }
                          },
                          "id": 11957,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "957:52:30",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "hexValue": "4661696c6564207472616e7366657246726f6d2062656361757365206f6620737566666963656e7420416c6c6f77616e6365206973206e6f742070726f7669646564",
                          "id": 11958,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "string",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "1011:68:30",
                          "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": 11950,
                        "name": "require",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [
                          23134,
                          23135
                        ],
                        "referencedDeclaration": 23135,
                        "src": "949:7:30",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                          "typeString": "function (bool,string memory) pure"
                        }
                      },
                      "id": 11959,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "949:131:30",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 11960,
                    "nodeType": "ExpressionStatement",
                    "src": "949:131:30"
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 11965,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 23131,
                              "src": "1133:3:30",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 11966,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "1133:10:30",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 11968,
                                "name": "polyToken",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9725,
                                "src": "1153:9:30",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_ERC20_$22837",
                                  "typeString": "contract ERC20"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_ERC20_$22837",
                                  "typeString": "contract ERC20"
                                }
                              ],
                              "id": 11967,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "1145:7:30",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": "address"
                            },
                            "id": 11969,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1145:18:30",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 11964,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "NewExpression",
                          "src": "1105:27:30",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_creation_nonpayable$_t_address_$_t_address_$returns$_t_contract$_ERC20DividendCheckpoint_$11916_$",
                            "typeString": "function (address,address) returns (contract ERC20DividendCheckpoint)"
                          },
                          "typeName": {
                            "contractScope": null,
                            "id": 11963,
                            "name": "ERC20DividendCheckpoint",
                            "nodeType": "UserDefinedTypeName",
                            "referencedDeclaration": 11916,
                            "src": "1109:23:30",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ERC20DividendCheckpoint_$11916",
                              "typeString": "contract ERC20DividendCheckpoint"
                            }
                          }
                        },
                        "id": 11970,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1105:59:30",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20DividendCheckpoint_$11916",
                          "typeString": "contract ERC20DividendCheckpoint"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_ERC20DividendCheckpoint_$11916",
                          "typeString": "contract ERC20DividendCheckpoint"
                        }
                      ],
                      "id": 11962,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "1097:7:30",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": "address"
                    },
                    "id": 11971,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1097:68:30",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 11946,
                  "id": 11972,
                  "nodeType": "Return",
                  "src": "1090:75:30"
                }
              ]
            },
            "documentation": "@notice used to launch the Module with the help of factory\n@return address Contract address of the Module",
            "id": 11974,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "deploy",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 11943,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11942,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 11974,
                  "src": "863:5:30",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 11941,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "863:5:30",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "862:19:30"
            },
            "payable": false,
            "returnParameters": {
              "id": 11946,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11945,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 11974,
                  "src": "899:7:30",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 11944,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "899:7:30",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "898:9:30"
            },
            "scope": 12052,
            "src": "847:325:30",
            "stateMutability": "nonpayable",
            "superFunction": 9804,
            "visibility": "external"
          },
          {
            "body": {
              "id": 11981,
              "nodeType": "Block",
              "src": "1282:25:30",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "34",
                    "id": 11979,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1299:1:30",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_4_by_1",
                      "typeString": "int_const 4"
                    },
                    "value": "4"
                  },
                  "functionReturnParameters": 11978,
                  "id": 11980,
                  "nodeType": "Return",
                  "src": "1292:8:30"
                }
              ]
            },
            "documentation": "@notice Type of the Module factory",
            "id": 11982,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getType",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 11975,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1252:2:30"
            },
            "payable": false,
            "returnParameters": {
              "id": 11978,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11977,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 11982,
                  "src": "1275:5:30",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 11976,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "1275:5:30",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1274:7:30"
            },
            "scope": 12052,
            "src": "1236:71:30",
            "stateMutability": "view",
            "superFunction": 9809,
            "visibility": "public"
          },
          {
            "body": {
              "id": 11989,
              "nodeType": "Block",
              "src": "1419:49:30",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "45524332304469766964656e64436865636b706f696e74",
                    "id": 11987,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1436:25:30",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_43a5b74867058c4df92f68435161a1dfbed27e19f157b1bfa3354f437110895e",
                      "typeString": "literal_string \"ERC20DividendCheckpoint\""
                    },
                    "value": "ERC20DividendCheckpoint"
                  },
                  "functionReturnParameters": 11986,
                  "id": 11988,
                  "nodeType": "Return",
                  "src": "1429:32:30"
                }
              ]
            },
            "documentation": "@notice Get the name of the Module",
            "id": 11990,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getName",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 11983,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1387:2:30"
            },
            "payable": false,
            "returnParameters": {
              "id": 11986,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11985,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 11990,
                  "src": "1410:7:30",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 11984,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1410:7:30",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1409:9:30"
            },
            "scope": 12052,
            "src": "1371:97:30",
            "stateMutability": "view",
            "superFunction": 9814,
            "visibility": "public"
          },
          {
            "body": {
              "id": 11997,
              "nodeType": "Block",
              "src": "1593:91:30",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "437265617465204552433230206469766964656e647320666f7220746f6b656e20686f6c64657273206174206120737065636966696320636865636b706f696e74",
                    "id": 11995,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1610:67:30",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_71f7be4d992b8c004e23a6d67b366e42e8a5bd86d343609f4b48c8d380984131",
                      "typeString": "literal_string \"Create ERC20 dividends for token holders at a specific checkpoint\""
                    },
                    "value": "Create ERC20 dividends for token holders at a specific checkpoint"
                  },
                  "functionReturnParameters": 11994,
                  "id": 11996,
                  "nodeType": "Return",
                  "src": "1603:74:30"
                }
              ]
            },
            "documentation": "@notice Get the description of the Module",
            "id": 11998,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getDescription",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 11991,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1562:2:30"
            },
            "payable": false,
            "returnParameters": {
              "id": 11994,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11993,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 11998,
                  "src": "1585:6:30",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 11992,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1585:6:30",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1584:8:30"
            },
            "scope": 12052,
            "src": "1539:145:30",
            "stateMutability": "view",
            "superFunction": 9819,
            "visibility": "public"
          },
          {
            "body": {
              "id": 12005,
              "nodeType": "Block",
              "src": "1798:51:30",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "4552433230204469766964656e6420436865636b706f696e74",
                    "id": 12003,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1815:27:30",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_86f436467e808c19a5f3790976e07b8a17d9bab002d90fbe3005bf6dc44f6093",
                      "typeString": "literal_string \"ERC20 Dividend Checkpoint\""
                    },
                    "value": "ERC20 Dividend Checkpoint"
                  },
                  "functionReturnParameters": 12002,
                  "id": 12004,
                  "nodeType": "Return",
                  "src": "1808:34:30"
                }
              ]
            },
            "documentation": "@notice Get the title of the Module",
            "id": 12006,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getTitle",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 11999,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1766:2:30"
            },
            "payable": false,
            "returnParameters": {
              "id": 12002,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12001,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 12006,
                  "src": "1790:6:30",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 12000,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1790:6:30",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1789:8:30"
            },
            "scope": 12052,
            "src": "1749:100:30",
            "stateMutability": "view",
            "superFunction": 9824,
            "visibility": "public"
          },
          {
            "body": {
              "id": 12013,
              "nodeType": "Block",
              "src": "1993:157:30",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "4372656174652061204552433230206469766964656e642077686963682077696c6c2062652070616964206f757420746f20746f6b656e20686f6c646572732070726f706f7274696f6e616c20746f2074686569722062616c616e6365732061742074686520706f696e7420746865206469766964656e642069732063726561746564",
                    "id": 12011,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "2010:133:30",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_76cef9727525be44d266fc7a1d4ff6c53a3c01e9260c766de0b9297357bf050e",
                      "typeString": "literal_string \"Create a ERC20 dividend which will be paid out to token holders proportional to their balances at the point the dividend is created\""
                    },
                    "value": "Create a ERC20 dividend which will be paid out to token holders proportional to their balances at the point the dividend is created"
                  },
                  "functionReturnParameters": 12010,
                  "id": 12012,
                  "nodeType": "Return",
                  "src": "2003:140:30"
                }
              ]
            },
            "documentation": "@notice Get the Instructions that helped to used the module",
            "id": 12014,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getInstructions",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 12007,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1962:2:30"
            },
            "payable": false,
            "returnParameters": {
              "id": 12010,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12009,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 12014,
                  "src": "1985:6:30",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 12008,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1985:6:30",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1984:8:30"
            },
            "scope": 12052,
            "src": "1938:212:30",
            "stateMutability": "view",
            "superFunction": 9829,
            "visibility": "public"
          },
          {
            "body": {
              "id": 12050,
              "nodeType": "Block",
              "src": "2280:212:30",
              "statements": [
                {
                  "assignments": [
                    12023
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 12023,
                      "name": "availableTags",
                      "nodeType": "VariableDeclaration",
                      "scope": 12051,
                      "src": "2290:30:30",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                        "typeString": "bytes32[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 12021,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "2290:7:30",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 12022,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "2290:9:30",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                          "typeString": "bytes32[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 12029,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "33",
                        "id": 12027,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2337:1:30",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_3_by_1",
                          "typeString": "int_const 3"
                        },
                        "value": "3"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_rational_3_by_1",
                          "typeString": "int_const 3"
                        }
                      ],
                      "id": 12026,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "2323:13:30",
                      "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": 12024,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "2327:7:30",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 12025,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "2327:9:30",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                          "typeString": "bytes32[]"
                        }
                      }
                    },
                    "id": 12028,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2323:16:30",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_memory",
                      "typeString": "bytes32[] memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2290:49:30"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 12034,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 12030,
                        "name": "availableTags",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12023,
                        "src": "2349:13:30",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                          "typeString": "bytes32[] memory"
                        }
                      },
                      "id": 12032,
                      "indexExpression": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 12031,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2363:1:30",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "2349:16:30",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "4552433230",
                      "id": 12033,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "string",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2368:7:30",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_stringliteral_8ae85d849167ff996c04040c44924fd364217285e4cad818292c7ac37c0a345b",
                        "typeString": "literal_string \"ERC20\""
                      },
                      "value": "ERC20"
                    },
                    "src": "2349:26:30",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 12035,
                  "nodeType": "ExpressionStatement",
                  "src": "2349:26:30"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 12040,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 12036,
                        "name": "availableTags",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12023,
                        "src": "2385:13:30",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                          "typeString": "bytes32[] memory"
                        }
                      },
                      "id": 12038,
                      "indexExpression": {
                        "argumentTypes": null,
                        "hexValue": "31",
                        "id": 12037,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2399:1:30",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "2385:16:30",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "4469766964656e64",
                      "id": 12039,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "string",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2404:10:30",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_stringliteral_1a89444c0f8c4f319a738fad464c92de56f318730368af8f54e4977fa8c6d063",
                        "typeString": "literal_string \"Dividend\""
                      },
                      "value": "Dividend"
                    },
                    "src": "2385:29:30",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 12041,
                  "nodeType": "ExpressionStatement",
                  "src": "2385:29:30"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 12046,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 12042,
                        "name": "availableTags",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12023,
                        "src": "2424:13:30",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                          "typeString": "bytes32[] memory"
                        }
                      },
                      "id": 12044,
                      "indexExpression": {
                        "argumentTypes": null,
                        "hexValue": "32",
                        "id": 12043,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2438:1:30",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_2_by_1",
                          "typeString": "int_const 2"
                        },
                        "value": "2"
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "2424:16:30",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "436865636b706f696e74",
                      "id": 12045,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "string",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2443:12:30",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_stringliteral_3b8e9053b7ff4161ec05d93ad47701603857e890455cc4e7489597c5341a50ae",
                        "typeString": "literal_string \"Checkpoint\""
                      },
                      "value": "Checkpoint"
                    },
                    "src": "2424:31:30",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 12047,
                  "nodeType": "ExpressionStatement",
                  "src": "2424:31:30"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 12048,
                    "name": "availableTags",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 12023,
                    "src": "2472:13:30",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                      "typeString": "bytes32[] memory"
                    }
                  },
                  "functionReturnParameters": 12019,
                  "id": 12049,
                  "nodeType": "Return",
                  "src": "2465:20:30"
                }
              ]
            },
            "documentation": "@notice Get the tags related to the module factory",
            "id": 12051,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getTags",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 12015,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2246:2:30"
            },
            "payable": false,
            "returnParameters": {
              "id": 12019,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12018,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 12051,
                  "src": "2269:9:30",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                    "typeString": "bytes32[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 12016,
                      "name": "bytes32",
                      "nodeType": "ElementaryTypeName",
                      "src": "2269:7:30",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "id": 12017,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "2269:9:30",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                      "typeString": "bytes32[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2268:11:30"
            },
            "scope": 12052,
            "src": "2230:262:30",
            "stateMutability": "view",
            "superFunction": 9835,
            "visibility": "public"
          }
        ],
        "scope": 12053,
        "src": "184:2310:30"
      }
    ],
    "src": "0:2495:30"
  },
  "compiler": {
    "name": "solc",
    "version": "0.4.24+commit.e67f0147.Emscripten.clang"
  },
  "networks": {
    "15": {
      "events": {},
      "links": {},
      "address": "0x9ed420364a32c7cf15fe74e260bb9e47241ebb95",
      "transactionHash": "0xdfe6518189c3e724a0e77a2f7edec05fa81081d97c70d911f05b93ae8d105575"
    }
  },
  "schemaVersion": "2.0.1",
  "updatedAt": "2018-08-21T09:48:28.923Z"
}