{
  "contractName": "ISecurityToken",
  "abi": [
    {
      "constant": true,
      "inputs": [],
      "name": "name",
      "outputs": [
        {
          "name": "",
          "type": "string"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_spender",
          "type": "address"
        },
        {
          "name": "_value",
          "type": "uint256"
        }
      ],
      "name": "approve",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "totalSupply",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_from",
          "type": "address"
        },
        {
          "name": "_to",
          "type": "address"
        },
        {
          "name": "_value",
          "type": "uint256"
        }
      ],
      "name": "transferFrom",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "decimals",
      "outputs": [
        {
          "name": "",
          "type": "uint8"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "investors",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_investor",
          "type": "address"
        },
        {
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "mint",
      "outputs": [
        {
          "name": "success",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_value",
          "type": "uint256"
        }
      ],
      "name": "burn",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "currentCheckpointId",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "granularity",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "STO_KEY",
      "outputs": [
        {
          "name": "",
          "type": "uint8"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_spender",
          "type": "address"
        },
        {
          "name": "_subtractedValue",
          "type": "uint256"
        }
      ],
      "name": "decreaseApproval",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_owner",
          "type": "address"
        }
      ],
      "name": "balanceOf",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "TRANSFERMANAGER_KEY",
      "outputs": [
        {
          "name": "",
          "type": "uint8"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "symbol",
      "outputs": [
        {
          "name": "",
          "type": "string"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_from",
          "type": "address"
        },
        {
          "name": "_to",
          "type": "address"
        },
        {
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "verifyTransfer",
      "outputs": [
        {
          "name": "success",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "PERMISSIONMANAGER_KEY",
      "outputs": [
        {
          "name": "",
          "type": "uint8"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_to",
          "type": "address"
        },
        {
          "name": "_value",
          "type": "uint256"
        }
      ],
      "name": "transfer",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "CHECKPOINT_KEY",
      "outputs": [
        {
          "name": "",
          "type": "uint8"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "tokenDetails",
      "outputs": [
        {
          "name": "",
          "type": "string"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_spender",
          "type": "address"
        },
        {
          "name": "_addedValue",
          "type": "uint256"
        }
      ],
      "name": "increaseApproval",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "investorCount",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_owner",
          "type": "address"
        },
        {
          "name": "_spender",
          "type": "address"
        }
      ],
      "name": "allowance",
      "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"
    },
    {
      "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"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "Minted",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "_burner",
          "type": "address"
        },
        {
          "indexed": false,
          "name": "_value",
          "type": "uint256"
        }
      ],
      "name": "Burnt",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "name": "spender",
          "type": "address"
        },
        {
          "indexed": false,
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "Approval",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "Transfer",
      "type": "event"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_delegate",
          "type": "address"
        },
        {
          "name": "_module",
          "type": "address"
        },
        {
          "name": "_perm",
          "type": "bytes32"
        }
      ],
      "name": "checkPermission",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_moduleType",
          "type": "uint8"
        },
        {
          "name": "_moduleIndex",
          "type": "uint256"
        }
      ],
      "name": "getModule",
      "outputs": [
        {
          "name": "",
          "type": "bytes32"
        },
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_moduleType",
          "type": "uint8"
        },
        {
          "name": "_name",
          "type": "bytes32"
        }
      ],
      "name": "getModuleByName",
      "outputs": [
        {
          "name": "",
          "type": "bytes32"
        },
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_checkpointId",
          "type": "uint256"
        }
      ],
      "name": "totalSupplyAt",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_investor",
          "type": "address"
        },
        {
          "name": "_checkpointId",
          "type": "uint256"
        }
      ],
      "name": "balanceOfAt",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "createCheckpoint",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getInvestorsLength",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": "0x",
  "deployedBytecode": "0x",
  "sourceMap": "",
  "deployedSourceMap": "",
  "source": "pragma solidity ^0.4.24;\n\nimport \"./IST20.sol\";\nimport \"openzeppelin-solidity/contracts/ownership/Ownable.sol\";\n\n/**\n * @title Interface for all security tokens\n */\ncontract ISecurityToken is IST20, Ownable {\n\n    uint8 public constant PERMISSIONMANAGER_KEY = 1;\n    uint8 public constant TRANSFERMANAGER_KEY = 2;\n    uint8 public constant STO_KEY = 3;\n    uint8 public constant CHECKPOINT_KEY = 4;\n    uint256 public granularity;\n\n    // Value of current checkpoint\n    uint256 public currentCheckpointId;\n\n    // Total number of non-zero token holders\n    uint256 public investorCount;\n\n    // List of token holders\n    address[] public investors;\n\n    // Permissions this to a Permission module, which has a key of 1\n    // If no Permission return false - note that IModule withPerm will allow ST owner all permissions anyway\n    // this allows individual modules to override this logic if needed (to not allow ST owner all permissions)\n    function checkPermission(address _delegate, address _module, bytes32 _perm) public view returns(bool);\n\n    /**\n     * @notice returns module list for a module type\n     * @param _moduleType is which type of module we are trying to remove\n     * @param _moduleIndex is the index of the module within the chosen type\n     */\n    function getModule(uint8 _moduleType, uint _moduleIndex) public view returns (bytes32, address);\n\n    /**\n     * @notice returns module list for a module name - will return first match\n     * @param _moduleType is which type of module we are trying to remove\n     * @param _name is the name of the module within the chosen type\n     */\n    function getModuleByName(uint8 _moduleType, bytes32 _name) public view returns (bytes32, address);\n\n    /**\n     * @notice Queries totalSupply as of a defined checkpoint\n     * @param _checkpointId Checkpoint ID to query as of\n     */\n    function totalSupplyAt(uint256 _checkpointId) public view returns(uint256);\n\n    /**\n     * @notice Queries balances as of a defined checkpoint\n     * @param _investor Investor to query balance for\n     * @param _checkpointId Checkpoint ID to query as of\n     */\n    function balanceOfAt(address _investor, uint256 _checkpointId) public view returns(uint256);\n\n    /**\n     * @notice Creates a checkpoint that can be used to query historical balances / totalSuppy\n     */\n    function createCheckpoint() public returns(uint256);\n\n    /**\n     * @notice gets length of investors array\n     * NB - this length may differ from investorCount if list has not been pruned of zero balance investors\n     * @return length\n     */\n    function getInvestorsLength() public view returns(uint256);\n\n}\n",
  "sourcePath": "/Users/satyamagrawal/Repositories/testing-package/polymath-core/contracts/interfaces/ISecurityToken.sol",
  "ast": {
    "absolutePath": "/Users/satyamagrawal/Repositories/testing-package/polymath-core/contracts/interfaces/ISecurityToken.sol",
    "exportedSymbols": {
      "ISecurityToken": [
        10159
      ]
    },
    "id": 10160,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 10072,
        "literals": [
          "solidity",
          "^",
          "0.4",
          ".24"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:24:19"
      },
      {
        "absolutePath": "/Users/satyamagrawal/Repositories/testing-package/polymath-core/contracts/interfaces/IST20.sol",
        "file": "./IST20.sol",
        "id": 10073,
        "nodeType": "ImportDirective",
        "scope": 10160,
        "sourceUnit": 10049,
        "src": "26:21:19",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "openzeppelin-solidity/contracts/ownership/Ownable.sol",
        "file": "openzeppelin-solidity/contracts/ownership/Ownable.sol",
        "id": 10074,
        "nodeType": "ImportDirective",
        "scope": 10160,
        "sourceUnit": 22665,
        "src": "48:63:19",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 10075,
              "name": "IST20",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 10048,
              "src": "192:5:19",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IST20_$10048",
                "typeString": "contract IST20"
              }
            },
            "id": 10076,
            "nodeType": "InheritanceSpecifier",
            "src": "192:5:19"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 10077,
              "name": "Ownable",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 22664,
              "src": "199:7:19",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Ownable_$22664",
                "typeString": "contract Ownable"
              }
            },
            "id": 10078,
            "nodeType": "InheritanceSpecifier",
            "src": "199:7:19"
          }
        ],
        "contractDependencies": [
          10048,
          22664,
          22760,
          22794,
          22837,
          22869,
          23116
        ],
        "contractKind": "contract",
        "documentation": "@title Interface for all security tokens",
        "fullyImplemented": false,
        "id": 10159,
        "linearizedBaseContracts": [
          10159,
          22664,
          10048,
          22794,
          23116,
          22760,
          22837,
          22869
        ],
        "name": "ISecurityToken",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": true,
            "id": 10081,
            "name": "PERMISSIONMANAGER_KEY",
            "nodeType": "VariableDeclaration",
            "scope": 10159,
            "src": "214:47:19",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint8",
              "typeString": "uint8"
            },
            "typeName": {
              "id": 10079,
              "name": "uint8",
              "nodeType": "ElementaryTypeName",
              "src": "214:5:19",
              "typeDescriptions": {
                "typeIdentifier": "t_uint8",
                "typeString": "uint8"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "31",
              "id": 10080,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "260:1:19",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_1_by_1",
                "typeString": "int_const 1"
              },
              "value": "1"
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 10084,
            "name": "TRANSFERMANAGER_KEY",
            "nodeType": "VariableDeclaration",
            "scope": 10159,
            "src": "267:45:19",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint8",
              "typeString": "uint8"
            },
            "typeName": {
              "id": 10082,
              "name": "uint8",
              "nodeType": "ElementaryTypeName",
              "src": "267:5:19",
              "typeDescriptions": {
                "typeIdentifier": "t_uint8",
                "typeString": "uint8"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "32",
              "id": 10083,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "311:1:19",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_2_by_1",
                "typeString": "int_const 2"
              },
              "value": "2"
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 10087,
            "name": "STO_KEY",
            "nodeType": "VariableDeclaration",
            "scope": 10159,
            "src": "318:33:19",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint8",
              "typeString": "uint8"
            },
            "typeName": {
              "id": 10085,
              "name": "uint8",
              "nodeType": "ElementaryTypeName",
              "src": "318:5:19",
              "typeDescriptions": {
                "typeIdentifier": "t_uint8",
                "typeString": "uint8"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "33",
              "id": 10086,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "350:1:19",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_3_by_1",
                "typeString": "int_const 3"
              },
              "value": "3"
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 10090,
            "name": "CHECKPOINT_KEY",
            "nodeType": "VariableDeclaration",
            "scope": 10159,
            "src": "357:40:19",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint8",
              "typeString": "uint8"
            },
            "typeName": {
              "id": 10088,
              "name": "uint8",
              "nodeType": "ElementaryTypeName",
              "src": "357:5:19",
              "typeDescriptions": {
                "typeIdentifier": "t_uint8",
                "typeString": "uint8"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "34",
              "id": 10089,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "396:1:19",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_4_by_1",
                "typeString": "int_const 4"
              },
              "value": "4"
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 10092,
            "name": "granularity",
            "nodeType": "VariableDeclaration",
            "scope": 10159,
            "src": "403:26:19",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 10091,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "403:7:19",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 10094,
            "name": "currentCheckpointId",
            "nodeType": "VariableDeclaration",
            "scope": 10159,
            "src": "471:34:19",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 10093,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "471:7:19",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 10096,
            "name": "investorCount",
            "nodeType": "VariableDeclaration",
            "scope": 10159,
            "src": "558:28:19",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 10095,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "558:7:19",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 10099,
            "name": "investors",
            "nodeType": "VariableDeclaration",
            "scope": 10159,
            "src": "622:26:19",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_array$_t_address_$dyn_storage",
              "typeString": "address[]"
            },
            "typeName": {
              "baseType": {
                "id": 10097,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "622:7:19",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "id": 10098,
              "length": null,
              "nodeType": "ArrayTypeName",
              "src": "622:9:19",
              "typeDescriptions": {
                "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                "typeString": "address[]"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "body": null,
            "documentation": null,
            "id": 10110,
            "implemented": false,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "checkPermission",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 10106,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10101,
                  "name": "_delegate",
                  "nodeType": "VariableDeclaration",
                  "scope": 10110,
                  "src": "969:17:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 10100,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "969:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 10103,
                  "name": "_module",
                  "nodeType": "VariableDeclaration",
                  "scope": 10110,
                  "src": "988:15:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 10102,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "988:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 10105,
                  "name": "_perm",
                  "nodeType": "VariableDeclaration",
                  "scope": 10110,
                  "src": "1005:13:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 10104,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1005:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "968:51:19"
            },
            "payable": false,
            "returnParameters": {
              "id": 10109,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10108,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 10110,
                  "src": "1040:4:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 10107,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "1040:4:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1039:6:19"
            },
            "scope": 10159,
            "src": "944:102:19",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": null,
            "documentation": "@notice returns module list for a module type\n@param _moduleType is which type of module we are trying to remove\n@param _moduleIndex is the index of the module within the chosen type",
            "id": 10121,
            "implemented": false,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getModule",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 10115,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10112,
                  "name": "_moduleType",
                  "nodeType": "VariableDeclaration",
                  "scope": 10121,
                  "src": "1291:17:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 10111,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "1291:5:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 10114,
                  "name": "_moduleIndex",
                  "nodeType": "VariableDeclaration",
                  "scope": 10121,
                  "src": "1310:17:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 10113,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "1310:4:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1290:38:19"
            },
            "payable": false,
            "returnParameters": {
              "id": 10120,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10117,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 10121,
                  "src": "1350:7:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 10116,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1350:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 10119,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 10121,
                  "src": "1359:7:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 10118,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1359:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1349:18:19"
            },
            "scope": 10159,
            "src": "1272:96:19",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": null,
            "documentation": "@notice returns module list for a module name - will return first match\n@param _moduleType is which type of module we are trying to remove\n@param _name is the name of the module within the chosen type",
            "id": 10132,
            "implemented": false,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getModuleByName",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 10126,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10123,
                  "name": "_moduleType",
                  "nodeType": "VariableDeclaration",
                  "scope": 10132,
                  "src": "1637:17:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 10122,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "1637:5:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 10125,
                  "name": "_name",
                  "nodeType": "VariableDeclaration",
                  "scope": 10132,
                  "src": "1656:13:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 10124,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1656:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1636:34:19"
            },
            "payable": false,
            "returnParameters": {
              "id": 10131,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10128,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 10132,
                  "src": "1692:7:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 10127,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1692:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 10130,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 10132,
                  "src": "1701:7:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 10129,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1701:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1691:18:19"
            },
            "scope": 10159,
            "src": "1612:98:19",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": null,
            "documentation": "@notice Queries totalSupply as of a defined checkpoint\n@param _checkpointId Checkpoint ID to query as of",
            "id": 10139,
            "implemented": false,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "totalSupplyAt",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 10135,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10134,
                  "name": "_checkpointId",
                  "nodeType": "VariableDeclaration",
                  "scope": 10139,
                  "src": "1874:21:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 10133,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1874:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1873:23:19"
            },
            "payable": false,
            "returnParameters": {
              "id": 10138,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10137,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 10139,
                  "src": "1917:7:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 10136,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1917:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1916:9:19"
            },
            "scope": 10159,
            "src": "1851:75:19",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": null,
            "documentation": "@notice Queries balances as of a defined checkpoint\n@param _investor Investor to query balance for\n@param _checkpointId Checkpoint ID to query as of",
            "id": 10148,
            "implemented": false,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "balanceOfAt",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 10144,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10141,
                  "name": "_investor",
                  "nodeType": "VariableDeclaration",
                  "scope": 10148,
                  "src": "2139:17:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 10140,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2139:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 10143,
                  "name": "_checkpointId",
                  "nodeType": "VariableDeclaration",
                  "scope": 10148,
                  "src": "2158:21:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 10142,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2158:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2138:42:19"
            },
            "payable": false,
            "returnParameters": {
              "id": 10147,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10146,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 10148,
                  "src": "2201:7:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 10145,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2201:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2200:9:19"
            },
            "scope": 10159,
            "src": "2118:92:19",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": null,
            "documentation": "@notice Creates a checkpoint that can be used to query historical balances / totalSuppy",
            "id": 10153,
            "implemented": false,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "createCheckpoint",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 10149,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2352:2:19"
            },
            "payable": false,
            "returnParameters": {
              "id": 10152,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10151,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 10153,
                  "src": "2370:7:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 10150,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2370:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2369:9:19"
            },
            "scope": 10159,
            "src": "2327:52:19",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": null,
            "documentation": "@notice gets length of investors array\nNB - this length may differ from investorCount if list has not been pruned of zero balance investors\n@return length",
            "id": 10158,
            "implemented": false,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getInvestorsLength",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 10154,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2604:2:19"
            },
            "payable": false,
            "returnParameters": {
              "id": 10157,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10156,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 10158,
                  "src": "2627:7:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 10155,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2627:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2626:9:19"
            },
            "scope": 10159,
            "src": "2577:59:19",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          }
        ],
        "scope": 10160,
        "src": "165:2474:19"
      }
    ],
    "src": "0:2640:19"
  },
  "legacyAST": {
    "absolutePath": "/Users/satyamagrawal/Repositories/testing-package/polymath-core/contracts/interfaces/ISecurityToken.sol",
    "exportedSymbols": {
      "ISecurityToken": [
        10159
      ]
    },
    "id": 10160,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 10072,
        "literals": [
          "solidity",
          "^",
          "0.4",
          ".24"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:24:19"
      },
      {
        "absolutePath": "/Users/satyamagrawal/Repositories/testing-package/polymath-core/contracts/interfaces/IST20.sol",
        "file": "./IST20.sol",
        "id": 10073,
        "nodeType": "ImportDirective",
        "scope": 10160,
        "sourceUnit": 10049,
        "src": "26:21:19",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "openzeppelin-solidity/contracts/ownership/Ownable.sol",
        "file": "openzeppelin-solidity/contracts/ownership/Ownable.sol",
        "id": 10074,
        "nodeType": "ImportDirective",
        "scope": 10160,
        "sourceUnit": 22665,
        "src": "48:63:19",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 10075,
              "name": "IST20",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 10048,
              "src": "192:5:19",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IST20_$10048",
                "typeString": "contract IST20"
              }
            },
            "id": 10076,
            "nodeType": "InheritanceSpecifier",
            "src": "192:5:19"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 10077,
              "name": "Ownable",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 22664,
              "src": "199:7:19",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Ownable_$22664",
                "typeString": "contract Ownable"
              }
            },
            "id": 10078,
            "nodeType": "InheritanceSpecifier",
            "src": "199:7:19"
          }
        ],
        "contractDependencies": [
          10048,
          22664,
          22760,
          22794,
          22837,
          22869,
          23116
        ],
        "contractKind": "contract",
        "documentation": "@title Interface for all security tokens",
        "fullyImplemented": false,
        "id": 10159,
        "linearizedBaseContracts": [
          10159,
          22664,
          10048,
          22794,
          23116,
          22760,
          22837,
          22869
        ],
        "name": "ISecurityToken",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": true,
            "id": 10081,
            "name": "PERMISSIONMANAGER_KEY",
            "nodeType": "VariableDeclaration",
            "scope": 10159,
            "src": "214:47:19",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint8",
              "typeString": "uint8"
            },
            "typeName": {
              "id": 10079,
              "name": "uint8",
              "nodeType": "ElementaryTypeName",
              "src": "214:5:19",
              "typeDescriptions": {
                "typeIdentifier": "t_uint8",
                "typeString": "uint8"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "31",
              "id": 10080,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "260:1:19",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_1_by_1",
                "typeString": "int_const 1"
              },
              "value": "1"
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 10084,
            "name": "TRANSFERMANAGER_KEY",
            "nodeType": "VariableDeclaration",
            "scope": 10159,
            "src": "267:45:19",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint8",
              "typeString": "uint8"
            },
            "typeName": {
              "id": 10082,
              "name": "uint8",
              "nodeType": "ElementaryTypeName",
              "src": "267:5:19",
              "typeDescriptions": {
                "typeIdentifier": "t_uint8",
                "typeString": "uint8"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "32",
              "id": 10083,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "311:1:19",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_2_by_1",
                "typeString": "int_const 2"
              },
              "value": "2"
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 10087,
            "name": "STO_KEY",
            "nodeType": "VariableDeclaration",
            "scope": 10159,
            "src": "318:33:19",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint8",
              "typeString": "uint8"
            },
            "typeName": {
              "id": 10085,
              "name": "uint8",
              "nodeType": "ElementaryTypeName",
              "src": "318:5:19",
              "typeDescriptions": {
                "typeIdentifier": "t_uint8",
                "typeString": "uint8"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "33",
              "id": 10086,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "350:1:19",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_3_by_1",
                "typeString": "int_const 3"
              },
              "value": "3"
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 10090,
            "name": "CHECKPOINT_KEY",
            "nodeType": "VariableDeclaration",
            "scope": 10159,
            "src": "357:40:19",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint8",
              "typeString": "uint8"
            },
            "typeName": {
              "id": 10088,
              "name": "uint8",
              "nodeType": "ElementaryTypeName",
              "src": "357:5:19",
              "typeDescriptions": {
                "typeIdentifier": "t_uint8",
                "typeString": "uint8"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "34",
              "id": 10089,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "396:1:19",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_4_by_1",
                "typeString": "int_const 4"
              },
              "value": "4"
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 10092,
            "name": "granularity",
            "nodeType": "VariableDeclaration",
            "scope": 10159,
            "src": "403:26:19",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 10091,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "403:7:19",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 10094,
            "name": "currentCheckpointId",
            "nodeType": "VariableDeclaration",
            "scope": 10159,
            "src": "471:34:19",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 10093,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "471:7:19",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 10096,
            "name": "investorCount",
            "nodeType": "VariableDeclaration",
            "scope": 10159,
            "src": "558:28:19",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 10095,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "558:7:19",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 10099,
            "name": "investors",
            "nodeType": "VariableDeclaration",
            "scope": 10159,
            "src": "622:26:19",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_array$_t_address_$dyn_storage",
              "typeString": "address[]"
            },
            "typeName": {
              "baseType": {
                "id": 10097,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "622:7:19",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "id": 10098,
              "length": null,
              "nodeType": "ArrayTypeName",
              "src": "622:9:19",
              "typeDescriptions": {
                "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                "typeString": "address[]"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "body": null,
            "documentation": null,
            "id": 10110,
            "implemented": false,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "checkPermission",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 10106,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10101,
                  "name": "_delegate",
                  "nodeType": "VariableDeclaration",
                  "scope": 10110,
                  "src": "969:17:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 10100,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "969:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 10103,
                  "name": "_module",
                  "nodeType": "VariableDeclaration",
                  "scope": 10110,
                  "src": "988:15:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 10102,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "988:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 10105,
                  "name": "_perm",
                  "nodeType": "VariableDeclaration",
                  "scope": 10110,
                  "src": "1005:13:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 10104,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1005:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "968:51:19"
            },
            "payable": false,
            "returnParameters": {
              "id": 10109,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10108,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 10110,
                  "src": "1040:4:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 10107,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "1040:4:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1039:6:19"
            },
            "scope": 10159,
            "src": "944:102:19",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": null,
            "documentation": "@notice returns module list for a module type\n@param _moduleType is which type of module we are trying to remove\n@param _moduleIndex is the index of the module within the chosen type",
            "id": 10121,
            "implemented": false,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getModule",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 10115,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10112,
                  "name": "_moduleType",
                  "nodeType": "VariableDeclaration",
                  "scope": 10121,
                  "src": "1291:17:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 10111,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "1291:5:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 10114,
                  "name": "_moduleIndex",
                  "nodeType": "VariableDeclaration",
                  "scope": 10121,
                  "src": "1310:17:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 10113,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "1310:4:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1290:38:19"
            },
            "payable": false,
            "returnParameters": {
              "id": 10120,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10117,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 10121,
                  "src": "1350:7:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 10116,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1350:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 10119,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 10121,
                  "src": "1359:7:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 10118,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1359:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1349:18:19"
            },
            "scope": 10159,
            "src": "1272:96:19",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": null,
            "documentation": "@notice returns module list for a module name - will return first match\n@param _moduleType is which type of module we are trying to remove\n@param _name is the name of the module within the chosen type",
            "id": 10132,
            "implemented": false,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getModuleByName",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 10126,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10123,
                  "name": "_moduleType",
                  "nodeType": "VariableDeclaration",
                  "scope": 10132,
                  "src": "1637:17:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 10122,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "1637:5:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 10125,
                  "name": "_name",
                  "nodeType": "VariableDeclaration",
                  "scope": 10132,
                  "src": "1656:13:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 10124,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1656:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1636:34:19"
            },
            "payable": false,
            "returnParameters": {
              "id": 10131,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10128,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 10132,
                  "src": "1692:7:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 10127,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1692:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 10130,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 10132,
                  "src": "1701:7:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 10129,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1701:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1691:18:19"
            },
            "scope": 10159,
            "src": "1612:98:19",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": null,
            "documentation": "@notice Queries totalSupply as of a defined checkpoint\n@param _checkpointId Checkpoint ID to query as of",
            "id": 10139,
            "implemented": false,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "totalSupplyAt",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 10135,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10134,
                  "name": "_checkpointId",
                  "nodeType": "VariableDeclaration",
                  "scope": 10139,
                  "src": "1874:21:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 10133,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1874:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1873:23:19"
            },
            "payable": false,
            "returnParameters": {
              "id": 10138,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10137,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 10139,
                  "src": "1917:7:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 10136,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1917:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1916:9:19"
            },
            "scope": 10159,
            "src": "1851:75:19",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": null,
            "documentation": "@notice Queries balances as of a defined checkpoint\n@param _investor Investor to query balance for\n@param _checkpointId Checkpoint ID to query as of",
            "id": 10148,
            "implemented": false,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "balanceOfAt",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 10144,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10141,
                  "name": "_investor",
                  "nodeType": "VariableDeclaration",
                  "scope": 10148,
                  "src": "2139:17:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 10140,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2139:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 10143,
                  "name": "_checkpointId",
                  "nodeType": "VariableDeclaration",
                  "scope": 10148,
                  "src": "2158:21:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 10142,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2158:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2138:42:19"
            },
            "payable": false,
            "returnParameters": {
              "id": 10147,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10146,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 10148,
                  "src": "2201:7:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 10145,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2201:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2200:9:19"
            },
            "scope": 10159,
            "src": "2118:92:19",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": null,
            "documentation": "@notice Creates a checkpoint that can be used to query historical balances / totalSuppy",
            "id": 10153,
            "implemented": false,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "createCheckpoint",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 10149,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2352:2:19"
            },
            "payable": false,
            "returnParameters": {
              "id": 10152,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10151,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 10153,
                  "src": "2370:7:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 10150,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2370:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2369:9:19"
            },
            "scope": 10159,
            "src": "2327:52:19",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": null,
            "documentation": "@notice gets length of investors array\nNB - this length may differ from investorCount if list has not been pruned of zero balance investors\n@return length",
            "id": 10158,
            "implemented": false,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getInvestorsLength",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 10154,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2604:2:19"
            },
            "payable": false,
            "returnParameters": {
              "id": 10157,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10156,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 10158,
                  "src": "2627:7:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 10155,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2627:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2626:9:19"
            },
            "scope": 10159,
            "src": "2577:59:19",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          }
        ],
        "scope": 10160,
        "src": "165:2474:19"
      }
    ],
    "src": "0:2640:19"
  },
  "compiler": {
    "name": "solc",
    "version": "0.4.24+commit.e67f0147.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "2.0.1",
  "updatedAt": "2018-08-21T09:48:12.401Z"
}