{
  "contractName": "PercentageTransferManager",
  "abi": [
    {
      "constant": true,
      "inputs": [],
      "name": "WHITELIST",
      "outputs": [
        {
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "maxHolderPercentage",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "unpause",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "paused",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "takeFee",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "polyToken",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "pause",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "name": "whitelist",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "securityToken",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "factory",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "FEE_ADMIN",
      "outputs": [
        {
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "name": "_securityToken",
          "type": "address"
        },
        {
          "name": "_polyAddress",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "name": "_oldHolderPercentage",
          "type": "uint256"
        },
        {
          "indexed": false,
          "name": "_newHolderPercentage",
          "type": "uint256"
        }
      ],
      "name": "LogModifyHolderPercentage",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "name": "_investor",
          "type": "address"
        },
        {
          "indexed": false,
          "name": "_dateAdded",
          "type": "uint256"
        },
        {
          "indexed": false,
          "name": "_addedBy",
          "type": "address"
        },
        {
          "indexed": false,
          "name": "_valid",
          "type": "bool"
        }
      ],
      "name": "LogModifyWhitelist",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "name": "_timestammp",
          "type": "uint256"
        }
      ],
      "name": "Pause",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "name": "_timestamp",
          "type": "uint256"
        }
      ],
      "name": "Unpause",
      "type": "event"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "",
          "type": "address"
        },
        {
          "name": "_to",
          "type": "address"
        },
        {
          "name": "_amount",
          "type": "uint256"
        },
        {
          "name": "",
          "type": "bool"
        }
      ],
      "name": "verifyTransfer",
      "outputs": [
        {
          "name": "",
          "type": "uint8"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_maxHolderPercentage",
          "type": "uint256"
        }
      ],
      "name": "configure",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getInitFunction",
      "outputs": [
        {
          "name": "",
          "type": "bytes4"
        }
      ],
      "payable": false,
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_maxHolderPercentage",
          "type": "uint256"
        }
      ],
      "name": "changeHolderPercentage",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_investor",
          "type": "address"
        },
        {
          "name": "_valid",
          "type": "bool"
        }
      ],
      "name": "modifyWhitelist",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_investors",
          "type": "address[]"
        },
        {
          "name": "_valids",
          "type": "bool[]"
        }
      ],
      "name": "modifyWhitelistMulti",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getPermissions",
      "outputs": [
        {
          "name": "",
          "type": "bytes32[]"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": "0x60806040526002805460a060020a60ff021916905534801561002057600080fd5b5060405160408061150283398101604052805160209091015160018054600160a060020a03938416600160a060020a0319918216179091556000805482163317905560028054939092169216919091179055611481806100816000396000f3006080604052600436106100e25763ffffffff60e060020a600035041663060d206e81146100e75780631613ec9d1461010f5780631bb7cc99146101595780631eb25e0a1461018057806334dee40f146101985780633f4ba83a146101ad5780635c975abb146101c25780635f7619a4146101eb57806366ffebb8146102035780636faa22a51461021b5780637915c9e01461024c5780638456cb591461029f5780639b19251a146102b4578063a5891bb0146102d5578063b84dfbd214610363578063c3a07df614610378578063c45a0155146103dd578063d70afa96146103f2575b600080fd5b3480156100f357600080fd5b5061010d600160a060020a03600435166024351515610407565b005b34801561011b57600080fd5b5061012461062a565b604080517fffffffff000000000000000000000000000000000000000000000000000000009092168252519081900360200190f35b34801561016557600080fd5b5061016e61065f565b60408051918252519081900360200190f35b34801561018c57600080fd5b5061010d600435610671565b3480156101a457600080fd5b5061016e6106d8565b3480156101b957600080fd5b5061010d6106de565b3480156101ce57600080fd5b506101d76107c6565b604080519115158252519081900360200190f35b3480156101f757600080fd5b506101d76004356107d6565b34801561020f57600080fd5b5061010d600435610b15565b34801561022757600080fd5b50610230610c35565b60408051600160a060020a039092168252519081900360200190f35b34801561025857600080fd5b5061027b600160a060020a03600435811690602435166044356064351515610c44565b6040518082600381111561028b57fe5b60ff16815260200191505060405180910390f35b3480156102ab57600080fd5b5061010d610e82565b3480156102c057600080fd5b506101d7600160a060020a0360043516610f68565b3480156102e157600080fd5b506040805160206004803580820135838102808601850190965280855261010d95369593946024949385019291829185019084908082843750506040805187358901803560208181028481018201909552818452989b9a998901989297509082019550935083925085019084908082843750949750610f7d9650505050505050565b34801561036f57600080fd5b506102306111df565b34801561038457600080fd5b5061038d6111ee565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156103c95781810151838201526020016103b1565b505050509050019250505060405180910390f35b3480156103e957600080fd5b50610230611240565b3480156103fe57600080fd5b5061016e61124f565b600080516020611436833981519152600080600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561046c57600080fd5b505af1158015610480573d6000803e3d6000fd5b505050506040513d602081101561049657600080fd5b505160005433600160a060020a0392831681149450911614905081806104b95750805b8061055f5750600154604080517f8658b8b9000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018690529051600160a060020a0390921691638658b8b9916064808201926020929091908290030181600087803b15801561053257600080fd5b505af1158015610546573d6000803e3d6000fd5b505050506040513d602081101561055c57600080fd5b50515b15156105b5576040805160e560020a62461bcd02815260206004820152601760248201527f5065726d697373696f6e20636865636b206661696c6564000000000000000000604482015290519081900360640190fd5b600160a060020a038516600081815260046020908152604091829020805488151560ff1990911681179091558251938452429184019190915233838301526060830152517f92a32e2db0bd4f3560b8a5c04f3fb10141a87a75950b53a8d8f830abcf80a2989181900360800190a15050505050565b604080517f636f6e6669677572652875696e743235362900000000000000000000000000008152905190819003601201902090565b60008051602061143683398151915281565b600054600160a060020a031633146106d3576040805160e560020a62461bcd02815260206004820152601560248201527f53656e646572206973206e6f7420666163746f72790000000000000000000000604482015290519081900360640190fd5b600355565b60035481565b600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561073157600080fd5b505af1158015610745573d6000803e3d6000fd5b505050506040513d602081101561075b57600080fd5b5051600160a060020a031633146107bc576040805160e560020a62461bcd02815260206004820152601360248201527f53656e646572206973206e6f74206f776e657200000000000000000000000000604482015290519081900360640190fd5b6107c4611273565b565b60025460a060020a900460ff1681565b60007f4645455f41444d494e0000000000000000000000000000000000000000000000600080600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561084f57600080fd5b505af1158015610863573d6000803e3d6000fd5b505050506040513d602081101561087957600080fd5b505160005433600160a060020a03928316811494509116149050818061089c5750805b806109425750600154604080517f8658b8b9000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018690529051600160a060020a0390921691638658b8b9916064808201926020929091908290030181600087803b15801561091557600080fd5b505af1158015610929573d6000803e3d6000fd5b505050506040513d602081101561093f57600080fd5b50515b1515610998576040805160e560020a62461bcd02815260206004820152601760248201527f5065726d697373696f6e20636865636b206661696c6564000000000000000000604482015290519081900360640190fd5b60025460008054604080517f8da5cb5b0000000000000000000000000000000000000000000000000000000081529051600160a060020a03948516946323b872dd94309490911692638da5cb5b9260048083019360209383900390910190829087803b158015610a0757600080fd5b505af1158015610a1b573d6000803e3d6000fd5b505050506040513d6020811015610a3157600080fd5b50516040805160e060020a63ffffffff8616028152600160a060020a039384166004820152929091166024830152604482018990525160648083019260209291908290030181600087803b158015610a8857600080fd5b505af1158015610a9c573d6000803e3d6000fd5b505050506040513d6020811015610ab257600080fd5b50511515610b0a576040805160e560020a62461bcd02815260206004820152601260248201527f556e61626c6520746f2074616b65206665650000000000000000000000000000604482015290519081900360640190fd5b506001949350505050565b600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015610b6857600080fd5b505af1158015610b7c573d6000803e3d6000fd5b505050506040513d6020811015610b9257600080fd5b5051600160a060020a03163314610bf3576040805160e560020a62461bcd02815260206004820152601360248201527f53656e646572206973206e6f74206f776e657200000000000000000000000000604482015290519081900360640190fd5b600354604080519182526020820183905280517f5e1376565b86c90c6291f3905cefa4a3c34472b6c5bf57f935d6c5b6de95e4979281900390910190a1600355565b600254600160a060020a031681565b600254600090819060a060020a900460ff161515610e7457600160a060020a03851660009081526004602052604090205460ff1615610c865760019150610e79565b600154604080517f70a08231000000000000000000000000000000000000000000000000000000008152600160a060020a0388811660048301529151610d2993889316916370a082319160248083019260209291908290030181600087803b158015610cf157600080fd5b505af1158015610d05573d6000803e3d6000fd5b505050506040513d6020811015610d1b57600080fd5b50519063ffffffff61132916565b9050600354610e5c600160009054906101000a9004600160a060020a0316600160a060020a03166318160ddd6040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015610d8457600080fd5b505af1158015610d98573d6000803e3d6000fd5b505050506040513d6020811015610dae57600080fd5b5051600154604080517f313ce5670000000000000000000000000000000000000000000000000000000081529051610e5092600160a060020a03169163313ce5679160048083019260209291908290030181600087803b158015610e1157600080fd5b505af1158015610e25573d6000803e3d6000fd5b505050506040513d6020811015610e3b57600080fd5b5051859060ff16600a0a63ffffffff61133c16565b9063ffffffff61136516565b1115610e6b5760009150610e79565b60019150610e79565b600191505b50949350505050565b600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015610ed557600080fd5b505af1158015610ee9573d6000803e3d6000fd5b505050506040513d6020811015610eff57600080fd5b5051600160a060020a03163314610f60576040805160e560020a62461bcd02815260206004820152601360248201527f53656e646572206973206e6f74206f776e657200000000000000000000000000604482015290519081900360640190fd5b6107c461137a565b60046020526000908152604090205460ff1681565b6000600080516020611436833981519152600080600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015610fe457600080fd5b505af1158015610ff8573d6000803e3d6000fd5b505050506040513d602081101561100e57600080fd5b505160005433600160a060020a0392831681149450911614905081806110315750805b806110d75750600154604080517f8658b8b9000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018690529051600160a060020a0390921691638658b8b9916064808201926020929091908290030181600087803b1580156110aa57600080fd5b505af11580156110be573d6000803e3d6000fd5b505050506040513d60208110156110d457600080fd5b50515b151561112d576040805160e560020a62461bcd02815260206004820152601760248201527f5065726d697373696f6e20636865636b206661696c6564000000000000000000604482015290519081900360640190fd5b8451865114611186576040805160e560020a62461bcd02815260206004820152601c60248201527f496e707574206172726179206c656e677468206d69732d6d6174636800000000604482015290519081900360640190fd5b600093505b85518410156111d7576111cc86858151811015156111a557fe5b9060200190602002015186868151811015156111bd57fe5b90602001906020020151610407565b60019093019261118b565b505050505050565b600154600160a060020a031681565b6040805160018082528183019092526060918291906020808301908038833901905050905060008051602061143683398151915281600081518110151561123157fe5b60209081029091010152905090565b600054600160a060020a031681565b7f4645455f41444d494e000000000000000000000000000000000000000000000081565b60025460a060020a900460ff1615156112d6576040805160e560020a62461bcd02815260206004820152601660248201527f436f6e7472616374206973206e6f742070617573656400000000000000000000604482015290519081900360640190fd5b6002805474ff0000000000000000000000000000000000000000191690556040805142815290517faaa520fdd7d2c83061d632fa017b0432407e798818af63ea908589fceda39ab79181900360200190a1565b8181018281101561133657fe5b92915050565b600082151561134d57506000611336565b5081810281838281151561135d57fe5b041461133657fe5b6000818381151561137257fe5b049392505050565b60025460a060020a900460ff16156113dc576040805160e560020a62461bcd02815260206004820152601260248201527f436f6e7472616374206973207061757365640000000000000000000000000000604482015290519081900360640190fd5b6002805474ff0000000000000000000000000000000000000000191660a060020a1790556040805142815290517f68b095021b1f40fe513109f513c66692f0b3219aee674a69f4efc57badb8201d9181900360200190a1560057484954454c4953540000000000000000000000000000000000000000000000a165627a7a72305820ef822a79206faaf6d7cdafa3a4b49ee2ec18484baf4740e8b1149d1da07cac430029",
  "deployedBytecode": "0x6080604052600436106100e25763ffffffff60e060020a600035041663060d206e81146100e75780631613ec9d1461010f5780631bb7cc99146101595780631eb25e0a1461018057806334dee40f146101985780633f4ba83a146101ad5780635c975abb146101c25780635f7619a4146101eb57806366ffebb8146102035780636faa22a51461021b5780637915c9e01461024c5780638456cb591461029f5780639b19251a146102b4578063a5891bb0146102d5578063b84dfbd214610363578063c3a07df614610378578063c45a0155146103dd578063d70afa96146103f2575b600080fd5b3480156100f357600080fd5b5061010d600160a060020a03600435166024351515610407565b005b34801561011b57600080fd5b5061012461062a565b604080517fffffffff000000000000000000000000000000000000000000000000000000009092168252519081900360200190f35b34801561016557600080fd5b5061016e61065f565b60408051918252519081900360200190f35b34801561018c57600080fd5b5061010d600435610671565b3480156101a457600080fd5b5061016e6106d8565b3480156101b957600080fd5b5061010d6106de565b3480156101ce57600080fd5b506101d76107c6565b604080519115158252519081900360200190f35b3480156101f757600080fd5b506101d76004356107d6565b34801561020f57600080fd5b5061010d600435610b15565b34801561022757600080fd5b50610230610c35565b60408051600160a060020a039092168252519081900360200190f35b34801561025857600080fd5b5061027b600160a060020a03600435811690602435166044356064351515610c44565b6040518082600381111561028b57fe5b60ff16815260200191505060405180910390f35b3480156102ab57600080fd5b5061010d610e82565b3480156102c057600080fd5b506101d7600160a060020a0360043516610f68565b3480156102e157600080fd5b506040805160206004803580820135838102808601850190965280855261010d95369593946024949385019291829185019084908082843750506040805187358901803560208181028481018201909552818452989b9a998901989297509082019550935083925085019084908082843750949750610f7d9650505050505050565b34801561036f57600080fd5b506102306111df565b34801561038457600080fd5b5061038d6111ee565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156103c95781810151838201526020016103b1565b505050509050019250505060405180910390f35b3480156103e957600080fd5b50610230611240565b3480156103fe57600080fd5b5061016e61124f565b600080516020611436833981519152600080600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561046c57600080fd5b505af1158015610480573d6000803e3d6000fd5b505050506040513d602081101561049657600080fd5b505160005433600160a060020a0392831681149450911614905081806104b95750805b8061055f5750600154604080517f8658b8b9000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018690529051600160a060020a0390921691638658b8b9916064808201926020929091908290030181600087803b15801561053257600080fd5b505af1158015610546573d6000803e3d6000fd5b505050506040513d602081101561055c57600080fd5b50515b15156105b5576040805160e560020a62461bcd02815260206004820152601760248201527f5065726d697373696f6e20636865636b206661696c6564000000000000000000604482015290519081900360640190fd5b600160a060020a038516600081815260046020908152604091829020805488151560ff1990911681179091558251938452429184019190915233838301526060830152517f92a32e2db0bd4f3560b8a5c04f3fb10141a87a75950b53a8d8f830abcf80a2989181900360800190a15050505050565b604080517f636f6e6669677572652875696e743235362900000000000000000000000000008152905190819003601201902090565b60008051602061143683398151915281565b600054600160a060020a031633146106d3576040805160e560020a62461bcd02815260206004820152601560248201527f53656e646572206973206e6f7420666163746f72790000000000000000000000604482015290519081900360640190fd5b600355565b60035481565b600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561073157600080fd5b505af1158015610745573d6000803e3d6000fd5b505050506040513d602081101561075b57600080fd5b5051600160a060020a031633146107bc576040805160e560020a62461bcd02815260206004820152601360248201527f53656e646572206973206e6f74206f776e657200000000000000000000000000604482015290519081900360640190fd5b6107c4611273565b565b60025460a060020a900460ff1681565b60007f4645455f41444d494e0000000000000000000000000000000000000000000000600080600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561084f57600080fd5b505af1158015610863573d6000803e3d6000fd5b505050506040513d602081101561087957600080fd5b505160005433600160a060020a03928316811494509116149050818061089c5750805b806109425750600154604080517f8658b8b9000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018690529051600160a060020a0390921691638658b8b9916064808201926020929091908290030181600087803b15801561091557600080fd5b505af1158015610929573d6000803e3d6000fd5b505050506040513d602081101561093f57600080fd5b50515b1515610998576040805160e560020a62461bcd02815260206004820152601760248201527f5065726d697373696f6e20636865636b206661696c6564000000000000000000604482015290519081900360640190fd5b60025460008054604080517f8da5cb5b0000000000000000000000000000000000000000000000000000000081529051600160a060020a03948516946323b872dd94309490911692638da5cb5b9260048083019360209383900390910190829087803b158015610a0757600080fd5b505af1158015610a1b573d6000803e3d6000fd5b505050506040513d6020811015610a3157600080fd5b50516040805160e060020a63ffffffff8616028152600160a060020a039384166004820152929091166024830152604482018990525160648083019260209291908290030181600087803b158015610a8857600080fd5b505af1158015610a9c573d6000803e3d6000fd5b505050506040513d6020811015610ab257600080fd5b50511515610b0a576040805160e560020a62461bcd02815260206004820152601260248201527f556e61626c6520746f2074616b65206665650000000000000000000000000000604482015290519081900360640190fd5b506001949350505050565b600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015610b6857600080fd5b505af1158015610b7c573d6000803e3d6000fd5b505050506040513d6020811015610b9257600080fd5b5051600160a060020a03163314610bf3576040805160e560020a62461bcd02815260206004820152601360248201527f53656e646572206973206e6f74206f776e657200000000000000000000000000604482015290519081900360640190fd5b600354604080519182526020820183905280517f5e1376565b86c90c6291f3905cefa4a3c34472b6c5bf57f935d6c5b6de95e4979281900390910190a1600355565b600254600160a060020a031681565b600254600090819060a060020a900460ff161515610e7457600160a060020a03851660009081526004602052604090205460ff1615610c865760019150610e79565b600154604080517f70a08231000000000000000000000000000000000000000000000000000000008152600160a060020a0388811660048301529151610d2993889316916370a082319160248083019260209291908290030181600087803b158015610cf157600080fd5b505af1158015610d05573d6000803e3d6000fd5b505050506040513d6020811015610d1b57600080fd5b50519063ffffffff61132916565b9050600354610e5c600160009054906101000a9004600160a060020a0316600160a060020a03166318160ddd6040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015610d8457600080fd5b505af1158015610d98573d6000803e3d6000fd5b505050506040513d6020811015610dae57600080fd5b5051600154604080517f313ce5670000000000000000000000000000000000000000000000000000000081529051610e5092600160a060020a03169163313ce5679160048083019260209291908290030181600087803b158015610e1157600080fd5b505af1158015610e25573d6000803e3d6000fd5b505050506040513d6020811015610e3b57600080fd5b5051859060ff16600a0a63ffffffff61133c16565b9063ffffffff61136516565b1115610e6b5760009150610e79565b60019150610e79565b600191505b50949350505050565b600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015610ed557600080fd5b505af1158015610ee9573d6000803e3d6000fd5b505050506040513d6020811015610eff57600080fd5b5051600160a060020a03163314610f60576040805160e560020a62461bcd02815260206004820152601360248201527f53656e646572206973206e6f74206f776e657200000000000000000000000000604482015290519081900360640190fd5b6107c461137a565b60046020526000908152604090205460ff1681565b6000600080516020611436833981519152600080600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015610fe457600080fd5b505af1158015610ff8573d6000803e3d6000fd5b505050506040513d602081101561100e57600080fd5b505160005433600160a060020a0392831681149450911614905081806110315750805b806110d75750600154604080517f8658b8b9000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018690529051600160a060020a0390921691638658b8b9916064808201926020929091908290030181600087803b1580156110aa57600080fd5b505af11580156110be573d6000803e3d6000fd5b505050506040513d60208110156110d457600080fd5b50515b151561112d576040805160e560020a62461bcd02815260206004820152601760248201527f5065726d697373696f6e20636865636b206661696c6564000000000000000000604482015290519081900360640190fd5b8451865114611186576040805160e560020a62461bcd02815260206004820152601c60248201527f496e707574206172726179206c656e677468206d69732d6d6174636800000000604482015290519081900360640190fd5b600093505b85518410156111d7576111cc86858151811015156111a557fe5b9060200190602002015186868151811015156111bd57fe5b90602001906020020151610407565b60019093019261118b565b505050505050565b600154600160a060020a031681565b6040805160018082528183019092526060918291906020808301908038833901905050905060008051602061143683398151915281600081518110151561123157fe5b60209081029091010152905090565b600054600160a060020a031681565b7f4645455f41444d494e000000000000000000000000000000000000000000000081565b60025460a060020a900460ff1615156112d6576040805160e560020a62461bcd02815260206004820152601660248201527f436f6e7472616374206973206e6f742070617573656400000000000000000000604482015290519081900360640190fd5b6002805474ff0000000000000000000000000000000000000000191690556040805142815290517faaa520fdd7d2c83061d632fa017b0432407e798818af63ea908589fceda39ab79181900360200190a1565b8181018281101561133657fe5b92915050565b600082151561134d57506000611336565b5081810281838281151561135d57fe5b041461133657fe5b6000818381151561137257fe5b049392505050565b60025460a060020a900460ff16156113dc576040805160e560020a62461bcd02815260206004820152601260248201527f436f6e7472616374206973207061757365640000000000000000000000000000604482015290519081900360640190fd5b6002805474ff0000000000000000000000000000000000000000191660a060020a1790556040805142815290517f68b095021b1f40fe513109f513c66692f0b3219aee674a69f4efc57badb8201d9181900360200190a1560057484954454c4953540000000000000000000000000000000000000000000000a165627a7a72305820ef822a79206faaf6d7cdafa3a4b49ee2ec18484baf4740e8b1149d1da07cac430029",
  "sourceMap": "490:4065:53:-;;;216:26:2;;;-1:-1:-1;;;;;;216:26:2;;;1341:123:53;5:2:-1;;;;30:1;27;20:12;5:2;1341:123:53;;;;;;;;;;;;;;;;;;;624:13:13;:30;;-1:-1:-1;;;;;624:30:13;;;-1:-1:-1;;;;;;624:30:13;;;;;;;:13;664:20;;;;674:10;664:20;;;694:9;:31;;;;;;;;;;;;;;490:4065:53;;;;;;",
  "deployedSourceMap": "490:4065:53:-;;;;;;;;-1:-1:-1;490:4065:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3465:199;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3465:199:53;;;-1:-1:-1;;;;;3465:199:53;;;;;;;;;2710:119;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2710:119:53;;;;;;;;;;;;;;;;;;;;;;;634:47;;8:9:-1;5:2;;;30:1;27;20:12;5:2;634:47:53;;;;;;;;;;;;;;;;;;;;2488:127;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2488:127:53;;;;;787:34;;8:9:-1;5:2;;;30:1;27;20:12;5:2;787:34:53;;;;711:69:50;;8:9:-1;5:2;;;30:1;27;20:12;5:2;711:69:50;;;;216:26:2;;8:9:-1;5:2;;;30:1;27;20:12;5:2;216:26:2;;;;;;;;;;;;;;;;;;;;;;1890:223:13;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1890:223:13;;;;;3020:221:53;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3020:221:53;;;;;365:22:13;;8:9:-1;5:2;;;30:1;27;20:12;5:2;365:22:13;;;;;;;;-1:-1:-1;;;;;365:22:13;;;;;;;;;;;;;;1585:722:53;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1585:722:53;-1:-1:-1;;;;;1585:722:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;786:65:50;;8:9:-1;5:2;;;30:1;27;20:12;5:2;786:65:50;;;;899:42:53;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;899:42:53;;;-1:-1:-1;;;;;899:42:53;;;3931:309;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3931:309:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3931:309:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3931:309:53;;;;-1:-1:-1;3931:309:53;-1:-1:-1;3931:309:53;;-1:-1:-1;3931:309:53;;;;;;;;;-1:-1:-1;3931:309:53;;-1:-1:-1;3931:309:53;;-1:-1:-1;;;;;;;3931:309:53;276:28:13;;8:9:-1;5:2;;;30:1;27;20:12;5:2;276:28:13;;;;4358:194:53;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4358:194:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;4358:194:53;;;;;;;;;;;;;;;;;247:22:13;;8:9:-1;5:2;;;30:1;27;20:12;5:2;247:22:13;;;;311:47;;8:9:-1;5:2;;;30:1;27;20:12;5:2;311:47:13;;;;3465:199:53;-1:-1:-1;;;;;;;;;;;1029:13:13;;1014:37;;;-1:-1:-1;;;;;1014:37:13;;;;-1:-1:-1;;;;;;;;;1029:13:13;;;;1014:35;;:37;;;;;;;;;;;;;;;-1:-1:-1;1029:13:13;1014:37;;;5:2:-1;;;;30:1;27;20:12;5:2;1014:37:13;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1014:37:13;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1014:37:13;1092:7;;1000:10;-1:-1:-1;;;;;1000:51:13;;;;;;-1:-1:-1;1092:7:13;;1078:21;;-1:-1:-1;1000:51:13;;1117:18;;;1126:9;1117:18;:99;;;-1:-1:-1;1152:13:13;;1137:79;;;;;;1183:10;1137:79;;;;1203:4;1137:79;;;;;;;;;;;;-1:-1:-1;;;;;1152:13:13;;;;1137:45;;:79;;;;;;;;;;;;;;;-1:-1:-1;1152:13:13;1137:79;;;5:2:-1;;;;30:1;27;20:12;5:2;1137:79:13;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1137:79:13;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1137:79:13;1117:99;1109:135;;;;;;;-1:-1:-1;;;;;1109:135:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3559:20:53;;;;;;:9;:20;;;;;;;;;:29;;-1:-1:-1;;3559:29:53;;;;;;;;;;3603:54;;;;;3633:3;3603:54;;;;;;;3638:10;3603:54;;;;;;;;;;;;;;;;;;;3465:199;;;;;:::o;2710:119::-;2790:31;;;;;;;;;;;;;;;;2710:119;:::o;634:47::-;-1:-1:-1;;;;;;;;;;;634:47:53;:::o;2488:127::-;1457:7:13;;-1:-1:-1;;;;;1457:7:13;1443:10;:21;1435:55;;;;;-1:-1:-1;;;;;1435:55:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;2566:19:53;:42;2488:127::o;787:34::-;;;;:::o;711:69:50:-;1334:13:13;;1319:37;;;-1:-1:-1;;;;;1319:37:13;;;;-1:-1:-1;;;;;1334:13:13;;;;1319:35;;:37;;;;;;;;;;;;;;;1334:13;;1319:37;;;5:2:-1;;;;30:1;27;20:12;5:2;1319:37:13;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1319:37:13;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1319:37:13;-1:-1:-1;;;;;1305:51:13;:10;:51;1297:83;;;;;-1:-1:-1;;;;;1297:83:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;757:16:50;:14;:16::i;:::-;711:69::o;216:26:2:-;;;-1:-1:-1;216:26:2;;;;;:::o;1890:223:13:-;1029:13;;1014:37;;;-1:-1:-1;;;;;1014:37:13;;;;1959:4;;1940:9;;1959:4;;;;-1:-1:-1;;;;;1029:13:13;;1014:35;;:37;;;;;;;;;;;;;;1959:4;1029:13;1014:37;;;5:2:-1;;;;30:1;27;20:12;5:2;1014:37:13;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1014:37:13;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1014:37:13;1092:7;;1000:10;-1:-1:-1;;;;;1000:51:13;;;;;;-1:-1:-1;1092:7:13;;1078:21;;-1:-1:-1;1000:51:13;;1117:18;;;1126:9;1117:18;:99;;;-1:-1:-1;1152:13:13;;1137:79;;;;;;1183:10;1137:79;;;;1203:4;1137:79;;;;;;;;;;;;-1:-1:-1;;;;;1152:13:13;;;;1137:45;;:79;;;;;;;;;;;;;;;-1:-1:-1;1152:13:13;1137:79;;;5:2:-1;;;;30:1;27;20:12;5:2;1137:79:13;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1137:79:13;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1137:79:13;1117:99;1109:135;;;;;;;-1:-1:-1;;;;;1109:135:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;1983:9;;;2036:7;;2021:31;;;-1:-1:-1;;;;;2021:31:13;;;;-1:-1:-1;;;;;1983:9:13;;;;:22;;2014:4;;2036:7;;;;;2021:29;;:31;;;;;;;;;;;;;;;;2036:7;2021:31;;;5:2:-1;;;;30:1;27;20:12;5:2;2021:31:13;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2021:31:13;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2021:31:13;1983:79;;;;;;-1:-1:-1;1983:79:13;;;-1:-1:-1;;;;;1983:79:13;;;;;;;;;;;;;;;;;;;;;;;;;;;2021:31;;1983:79;;;;;;;-1:-1:-1;1983:79:13;;;;5:2:-1;;;;30:1;27;20:12;5:2;1983:79:13;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1983:79:13;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1983:79:13;1975:110;;;;;;;-1:-1:-1;;;;;1975:110:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2102:4:13;;1890:223;-1:-1:-1;;;;1890:223:13:o;3020:221:53:-;1334:13:13;;1319:37;;;-1:-1:-1;;;;;1319:37:13;;;;-1:-1:-1;;;;;1334:13:13;;;;1319:35;;:37;;;;;;;;;;;;;;;1334:13;;1319:37;;;5:2:-1;;;;30:1;27;20:12;5:2;1319:37:13;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1319:37:13;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1319:37:13;-1:-1:-1;;;;;1305:51:13;:10;:51;1297:83;;;;;-1:-1:-1;;;;;1297:83:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;3140:19:53;;3114:68;;;;;;;;;;;;;;;;;;;;;;;;3192:19;:42;3020:221::o;365:22:13:-;;;-1:-1:-1;;;;;365:22:13;;:::o;1585:722:53:-;1722:6;;1699;;;;-1:-1:-1;1722:6:53;;;;1721:7;1717:558;;;-1:-1:-1;;;;;1865:14:53;;;;;;:9;:14;;;;;;;;1861:69;;;1906:9;1899:16;;;;1861:69;1979:13;;1964:44;;;;;;-1:-1:-1;;;;;1964:44:53;;;;;;;;;:57;;2013:7;;1979:13;;1964:39;;:44;;;;;;;;;;;;;;-1:-1:-1;1979:13:53;1964:44;;;5:2:-1;;;;30:1;27;20:12;5:2;1964:44:53;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1964:44:53;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1964:44:53;;:57;:48;:57;:::i;:::-;2160:19;;2128:13;;2113:43;;;;;;;;1943:78;;-1:-1:-1;2160:19:53;;2039:118;;-1:-1:-1;;;;;2128:13:53;;;;2113:41;;:43;;;;;;;;;;;;;;2128:13;;2113:43;;;5:2:-1;;;;30:1;27;20:12;5:2;2113:43:53;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2113:43:53;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2113:43:53;2081:13;;2066:40;;;;;;;;2039:69;;-1:-1:-1;;;;;2081:13:53;;2066:38;;:40;;;;;2113:43;;2066:40;;;;;;;2081:13;;2066:40;;;5:2:-1;;;;30:1;27;20:12;5:2;2066:40:53;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2066:40:53;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2066:40:53;2039:10;;2058:49;;2054:2;:53;2039:69;:14;:69;:::i;:::-;:73;:118;:73;:118;:::i;:::-;:140;2035:200;;;2206:14;2199:21;;;;2035:200;2255:9;2248:16;;;;1717:558;2291:9;2284:16;;1585:722;;;;;;;;:::o;786:65:50:-;1334:13:13;;1319:37;;;-1:-1:-1;;;;;1319:37:13;;;;-1:-1:-1;;;;;1334:13:13;;;;1319:35;;:37;;;;;;;;;;;;;;;1334:13;;1319:37;;;5:2:-1;;;;30:1;27;20:12;5:2;1319:37:13;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1319:37:13;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1319:37:13;-1:-1:-1;;;;;1305:51:13;:10;:51;1297:83;;;;;-1:-1:-1;;;;;1297:83:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;830:14:50;:12;:14::i;899:42:53:-;;;;;;;;;;;;;;;:::o;3931:309::-;4127:6;-1:-1:-1;;;;;;;;;;;1029:13:13;;1014:37;;;-1:-1:-1;;;;;1014:37:13;;;;-1:-1:-1;;;;;;;;;1029:13:13;;;;1014:35;;:37;;;;;;;;;;;;;;;-1:-1:-1;1029:13:13;1014:37;;;5:2:-1;;;;30:1;27;20:12;5:2;1014:37:13;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1014:37:13;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1014:37:13;1092:7;;1000:10;-1:-1:-1;;;;;1000:51:13;;;;;;-1:-1:-1;1092:7:13;;1078:21;;-1:-1:-1;1000:51:13;;1117:18;;;1126:9;1117:18;:99;;;-1:-1:-1;1152:13:13;;1137:79;;;;;;1183:10;1137:79;;;;1203:4;1137:79;;;;;;;;;;;;-1:-1:-1;;;;;1152:13:13;;;;1137:45;;:79;;;;;;;;;;;;;;;-1:-1:-1;1152:13:13;1137:79;;;5:2:-1;;;;30:1;27;20:12;5:2;1137:79:13;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1137:79:13;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1137:79:13;1117:99;1109:135;;;;;;;-1:-1:-1;;;;;1109:135:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;4065:14:53;;4044:17;;:35;4036:76;;;;;-1:-1:-1;;;;;4036:76:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;4136:1;4127:10;;4122:112;4143:10;:17;4139:1;:21;4122:112;;;4181:42;4197:10;4208:1;4197:13;;;;;;;;;;;;;;;;;;4212:7;4220:1;4212:10;;;;;;;;;;;;;;;;;;4181:15;:42::i;:::-;4162:3;;;;;4122:112;;;3931:309;;;;;;:::o;276:28:13:-;;;-1:-1:-1;;;;;276:28:13;;:::o;4358:194:53:-;4459:16;;;4473:1;4459:16;;;;;;;;;4404:9;;;;4459:16;;;;;;;105:10:-1;4459:16:53;88:34:-1;136:17;;-1:-1;4459:16:53;4425:50;;-1:-1:-1;;;;;;;;;;;4485:14:53;4500:1;4485:17;;;;;;;;;;;;;;;;;;:29;4531:14;-1:-1:-1;4358:194:53;:::o;247:22:13:-;;;-1:-1:-1;;;;;247:22:13;;:::o;311:47::-;;;:::o;915:98:2:-;590:6;;-1:-1:-1;590:6:2;;;;582:41;;;;;;;-1:-1:-1;;;;;582:41:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;965:6;:14;;-1:-1:-1;;965:14:2;;;994:12;;;1002:3;994:12;;;;;;;;;;;;;915:98::o;1214:123:63:-;1293:5;;;1311:6;;;;1304:14;;;;1214:123;;;;:::o;203:373::-;261:9;487:6;;483:35;;;-1:-1:-1;510:1:63;503:8;;483:35;-1:-1:-1;528:5:63;;;532:1;528;:5;546;;;;;;;;:10;539:18;;;658:272;716:7;924:1;920;:5;;;;;;;;;658:272;-1:-1:-1;;;658:272:63:o;728:96:2:-;397:6;;-1:-1:-1;397:6:2;;;;396:7;388:38;;;;;-1:-1:-1;;;;;388:38:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;779:6;:13;;-1:-1:-1;;779:13:2;-1:-1:-1;;;779:13:2;;;807:10;;;813:3;807:10;;;;;;;;;;;;;728:96::o",
  "source": "pragma solidity ^0.4.24;\n\nimport \"./ITransferManager.sol\";\nimport \"openzeppelin-solidity/contracts/math/SafeMath.sol\";\n\n/////////////////////\n// Module permissions\n/////////////////////\n//                                        Owner       WHITELIST      FLAGS\n// modifyWhitelist                          X             X\n// modifyWhitelistMulti                     X             X\n\n/**\n * @title Transfer Manager module for limiting percentage of token supply a single address can hold\n */\ncontract PercentageTransferManager is ITransferManager {\n    using SafeMath for uint256;\n\n    // Permission key for modifying the whitelist\n    bytes32 public constant WHITELIST = \"WHITELIST\";\n\n    // Maximum percentage that any holder can have, multiplied by 10**16 - e.g. 20% is 20 * 10**16\n    uint256 public maxHolderPercentage;\n\n    // Addresses on this list are always able to send / receive tokens\n    mapping (address => bool) public whitelist;\n\n    event LogModifyHolderPercentage(uint256 _oldHolderPercentage, uint256 _newHolderPercentage);\n    event LogModifyWhitelist(\n        address _investor,\n        uint256 _dateAdded,\n        address _addedBy,\n        bool    _valid\n    );\n\n    /**\n     * @notice Constructor\n     * @param _securityToken Address of the security token\n     * @param _polyAddress Address of the polytoken\n     */\n    constructor (address _securityToken, address _polyAddress)\n    public\n    IModule(_securityToken, _polyAddress)\n    {\n    }\n\n    /// @notice Used to verify the transfer transaction according to the rule implemented in the trnasfer managers\n    function verifyTransfer(address /* _from */, address _to, uint256 _amount, bool /* _isTransfer */) public returns(Result) {\n        if (!paused) {\n            // If an address is on the whitelist, it is allowed to hold more than maxHolderPercentage of the tokens.\n            if (whitelist[_to]) {\n                return Result.NA;\n            }\n            uint256 newBalance = ISecurityToken(securityToken).balanceOf(_to).add(_amount);\n            if (newBalance.mul(10**uint256(ISecurityToken(securityToken).decimals())).div(ISecurityToken(securityToken).totalSupply()) > maxHolderPercentage) {\n                return Result.INVALID;\n            }\n            return Result.NA;\n        }\n        return Result.NA;\n    }\n\n    /**\n     * @notice Used to intialize the variables of the contract\n     * @param _maxHolderPercentage Maximum amount of ST20 tokens(in %) can hold by the investor\n     */\n    function configure(uint256 _maxHolderPercentage) public onlyFactory {\n        maxHolderPercentage = _maxHolderPercentage;\n    }\n\n    /**\n     * @notice This function returns the signature of configure function\n     */\n    function getInitFunction() public pure returns (bytes4) {\n        return bytes4(keccak256(\"configure(uint256)\"));\n    }\n\n    /**\n    * @notice sets the maximum percentage that an individual token holder can hold\n    * @param _maxHolderPercentage is the new maximum percentage (multiplied by 10**16)\n    */\n    function changeHolderPercentage(uint256 _maxHolderPercentage) public onlyOwner {\n        emit LogModifyHolderPercentage(maxHolderPercentage, _maxHolderPercentage);\n        maxHolderPercentage = _maxHolderPercentage;\n    }\n\n    /**\n    * @notice adds or removes addresses from the whitelist.\n    * @param _investor is the address to whitelist\n    * @param _valid whether or not the address it to be added or removed from the whitelist\n    */\n    function modifyWhitelist(address _investor, bool _valid) public withPerm(WHITELIST) {\n        whitelist[_investor] = _valid;\n        emit LogModifyWhitelist(_investor, now, msg.sender, _valid);\n    }\n\n    /**\n    * @notice adds or removes addresses from the whitelist.\n    * @param _investors Array of the addresses to whitelist\n    * @param _valids Array of boolean value to decide whether or not the address it to be added or removed from the whitelist\n    */\n    function modifyWhitelistMulti(address[] _investors, bool[] _valids) public withPerm(WHITELIST) {\n        require(_investors.length == _valids.length, \"Input array length mis-match\");\n        for (uint i = 0; i < _investors.length; i++) {\n            modifyWhitelist(_investors[i], _valids[i]);\n        }\n    }\n\n    /**\n     * @notice Return the permissions flag that are associated with Percentage transfer Manager\n     */\n    function getPermissions() public view returns(bytes32[]) {\n        bytes32[] memory allPermissions = new bytes32[](1);\n        allPermissions[0] = WHITELIST;\n        return allPermissions;\n    }\n\n}\n",
  "sourcePath": "/Users/satyamagrawal/Repositories/testing-package/polymath-core/contracts/modules/TransferManager/PercentageTransferManager.sol",
  "ast": {
    "absolutePath": "/Users/satyamagrawal/Repositories/testing-package/polymath-core/contracts/modules/TransferManager/PercentageTransferManager.sol",
    "exportedSymbols": {
      "PercentageTransferManager": [
        19202
      ]
    },
    "id": 19203,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 18952,
        "literals": [
          "solidity",
          "^",
          "0.4",
          ".24"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:24:53"
      },
      {
        "absolutePath": "/Users/satyamagrawal/Repositories/testing-package/polymath-core/contracts/modules/TransferManager/ITransferManager.sol",
        "file": "./ITransferManager.sol",
        "id": 18953,
        "nodeType": "ImportDirective",
        "scope": 19203,
        "sourceUnit": 18395,
        "src": "26:32:53",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "openzeppelin-solidity/contracts/math/SafeMath.sol",
        "file": "openzeppelin-solidity/contracts/math/SafeMath.sol",
        "id": 18954,
        "nodeType": "ImportDirective",
        "scope": 19203,
        "sourceUnit": 22579,
        "src": "59:59:53",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 18955,
              "name": "ITransferManager",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 18394,
              "src": "528:16:53",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ITransferManager_$18394",
                "typeString": "contract ITransferManager"
              }
            },
            "id": 18956,
            "nodeType": "InheritanceSpecifier",
            "src": "528:16:53"
          }
        ],
        "contractDependencies": [
          471,
          9717,
          18394
        ],
        "contractKind": "contract",
        "documentation": "@title Transfer Manager module for limiting percentage of token supply a single address can hold",
        "fullyImplemented": true,
        "id": 19202,
        "linearizedBaseContracts": [
          19202,
          18394,
          471,
          9717
        ],
        "name": "PercentageTransferManager",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 18959,
            "libraryName": {
              "contractScope": null,
              "id": 18957,
              "name": "SafeMath",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 22578,
              "src": "557:8:53",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_SafeMath_$22578",
                "typeString": "library SafeMath"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "551:27:53",
            "typeName": {
              "id": 18958,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "570:7:53",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            }
          },
          {
            "constant": true,
            "id": 18962,
            "name": "WHITELIST",
            "nodeType": "VariableDeclaration",
            "scope": 19202,
            "src": "634:47:53",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 18960,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "634:7:53",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "57484954454c495354",
              "id": 18961,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "670:11:53",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_0af0c3ebe77999ca20698e1ff25f812bf82409a59d21ca15a41f39e0ce9f2500",
                "typeString": "literal_string \"WHITELIST\""
              },
              "value": "WHITELIST"
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 18964,
            "name": "maxHolderPercentage",
            "nodeType": "VariableDeclaration",
            "scope": 19202,
            "src": "787:34:53",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 18963,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "787:7:53",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 18968,
            "name": "whitelist",
            "nodeType": "VariableDeclaration",
            "scope": 19202,
            "src": "899:42:53",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
              "typeString": "mapping(address => bool)"
            },
            "typeName": {
              "id": 18967,
              "keyType": {
                "id": 18965,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "908:7:53",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "899:25:53",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                "typeString": "mapping(address => bool)"
              },
              "valueType": {
                "id": 18966,
                "name": "bool",
                "nodeType": "ElementaryTypeName",
                "src": "919:4:53",
                "typeDescriptions": {
                  "typeIdentifier": "t_bool",
                  "typeString": "bool"
                }
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 18974,
            "name": "LogModifyHolderPercentage",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 18973,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18970,
                  "indexed": false,
                  "name": "_oldHolderPercentage",
                  "nodeType": "VariableDeclaration",
                  "scope": 18974,
                  "src": "980:28:53",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 18969,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "980:7:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18972,
                  "indexed": false,
                  "name": "_newHolderPercentage",
                  "nodeType": "VariableDeclaration",
                  "scope": 18974,
                  "src": "1010:28:53",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 18971,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1010:7:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "979:60:53"
            },
            "src": "948:92:53"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 18984,
            "name": "LogModifyWhitelist",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 18983,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18976,
                  "indexed": false,
                  "name": "_investor",
                  "nodeType": "VariableDeclaration",
                  "scope": 18984,
                  "src": "1079:17:53",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 18975,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1079:7:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18978,
                  "indexed": false,
                  "name": "_dateAdded",
                  "nodeType": "VariableDeclaration",
                  "scope": 18984,
                  "src": "1106:18:53",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 18977,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1106:7:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18980,
                  "indexed": false,
                  "name": "_addedBy",
                  "nodeType": "VariableDeclaration",
                  "scope": 18984,
                  "src": "1134:16:53",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 18979,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1134:7:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18982,
                  "indexed": false,
                  "name": "_valid",
                  "nodeType": "VariableDeclaration",
                  "scope": 18984,
                  "src": "1160:14:53",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 18981,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "1160:4:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1069:111:53"
            },
            "src": "1045:136:53"
          },
          {
            "body": {
              "id": 18995,
              "nodeType": "Block",
              "src": "1457:7:53",
              "statements": []
            },
            "documentation": "@notice Constructor\n@param _securityToken Address of the security token\n@param _polyAddress Address of the polytoken",
            "id": 18996,
            "implemented": true,
            "isConstructor": true,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 18991,
                    "name": "_securityToken",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 18986,
                    "src": "1423:14:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 18992,
                    "name": "_polyAddress",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 18988,
                    "src": "1439:12:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 18993,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 18990,
                  "name": "IModule",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9717,
                  "src": "1415:7:53",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_IModule_$9717_$",
                    "typeString": "type(contract IModule)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1415:37:53"
              }
            ],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 18989,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18986,
                  "name": "_securityToken",
                  "nodeType": "VariableDeclaration",
                  "scope": 18996,
                  "src": "1354:22:53",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 18985,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1354:7:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18988,
                  "name": "_polyAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 18996,
                  "src": "1378:20:53",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 18987,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1378:7:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1353:46:53"
            },
            "payable": false,
            "returnParameters": {
              "id": 18994,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1457:0:53"
            },
            "scope": 19202,
            "src": "1341:123:53",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 19065,
              "nodeType": "Block",
              "src": "1707:600:53",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "id": 19010,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "1721:7:53",
                    "subExpression": {
                      "argumentTypes": null,
                      "id": 19009,
                      "name": "paused",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 423,
                      "src": "1722:6:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 19061,
                  "nodeType": "IfStatement",
                  "src": "1717:558:53",
                  "trueBody": {
                    "id": 19060,
                    "nodeType": "Block",
                    "src": "1730:545:53",
                    "statements": [
                      {
                        "condition": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 19011,
                            "name": "whitelist",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18968,
                            "src": "1865:9:53",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                              "typeString": "mapping(address => bool)"
                            }
                          },
                          "id": 19013,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 19012,
                            "name": "_to",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 19000,
                            "src": "1875:3:53",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "1865:14:53",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 19018,
                        "nodeType": "IfStatement",
                        "src": "1861:69:53",
                        "trueBody": {
                          "id": 19017,
                          "nodeType": "Block",
                          "src": "1881:49:53",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 19014,
                                  "name": "Result",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 18358,
                                  "src": "1906:6:53",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_enum$_Result_$18358_$",
                                    "typeString": "type(enum ITransferManager.Result)"
                                  }
                                },
                                "id": 19015,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberName": "NA",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "1906:9:53",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_enum$_Result_$18358",
                                  "typeString": "enum ITransferManager.Result"
                                }
                              },
                              "functionReturnParameters": 19008,
                              "id": 19016,
                              "nodeType": "Return",
                              "src": "1899:16:53"
                            }
                          ]
                        }
                      },
                      {
                        "assignments": [
                          19020
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 19020,
                            "name": "newBalance",
                            "nodeType": "VariableDeclaration",
                            "scope": 19066,
                            "src": "1943:18:53",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 19019,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "1943:7:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 19030,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 19028,
                              "name": "_amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 19002,
                              "src": "2013:7:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 19025,
                                  "name": "_to",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 19000,
                                  "src": "2004:3:53",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 19022,
                                      "name": "securityToken",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 9561,
                                      "src": "1979:13:53",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    ],
                                    "id": 19021,
                                    "name": "ISecurityToken",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 10159,
                                    "src": "1964:14:53",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_contract$_ISecurityToken_$10159_$",
                                      "typeString": "type(contract ISecurityToken)"
                                    }
                                  },
                                  "id": 19023,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "1964:29:53",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_ISecurityToken_$10159",
                                    "typeString": "contract ISecurityToken"
                                  }
                                },
                                "id": 19024,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "balanceOf",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 22759,
                                "src": "1964:39:53",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                                  "typeString": "function (address) view external returns (uint256)"
                                }
                              },
                              "id": 19026,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1964:44:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 19027,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "add",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 22577,
                            "src": "1964:48:53",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                              "typeString": "function (uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 19029,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1964:57:53",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "1943:78:53"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 19051,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "expression": {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "id": 19045,
                                        "name": "securityToken",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 9561,
                                        "src": "2128:13:53",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      ],
                                      "id": 19044,
                                      "name": "ISecurityToken",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 10159,
                                      "src": "2113:14:53",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_ISecurityToken_$10159_$",
                                        "typeString": "type(contract ISecurityToken)"
                                      }
                                    },
                                    "id": 19046,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "2113:29:53",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_ISecurityToken_$10159",
                                      "typeString": "contract ISecurityToken"
                                    }
                                  },
                                  "id": 19047,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "totalSupply",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 22687,
                                  "src": "2113:41:53",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$",
                                    "typeString": "function () view external returns (uint256)"
                                  }
                                },
                                "id": 19048,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2113:43:53",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 19041,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "argumentTypes": null,
                                      "hexValue": "3130",
                                      "id": 19033,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "2054:2:53",
                                      "subdenomination": null,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_10_by_1",
                                        "typeString": "int_const 10"
                                      },
                                      "value": "10"
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "**",
                                    "rightExpression": {
                                      "argumentTypes": null,
                                      "arguments": [
                                        {
                                          "argumentTypes": null,
                                          "arguments": [],
                                          "expression": {
                                            "argumentTypes": [],
                                            "expression": {
                                              "argumentTypes": null,
                                              "arguments": [
                                                {
                                                  "argumentTypes": null,
                                                  "id": 19036,
                                                  "name": "securityToken",
                                                  "nodeType": "Identifier",
                                                  "overloadedDeclarations": [],
                                                  "referencedDeclaration": 9561,
                                                  "src": "2081:13:53",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                  }
                                                }
                                              ],
                                              "expression": {
                                                "argumentTypes": [
                                                  {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                  }
                                                ],
                                                "id": 19035,
                                                "name": "ISecurityToken",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 10159,
                                                "src": "2066:14:53",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_type$_t_contract$_ISecurityToken_$10159_$",
                                                  "typeString": "type(contract ISecurityToken)"
                                                }
                                              },
                                              "id": 19037,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "kind": "typeConversion",
                                              "lValueRequested": false,
                                              "names": [],
                                              "nodeType": "FunctionCall",
                                              "src": "2066:29:53",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_contract$_ISecurityToken_$10159",
                                                "typeString": "contract ISecurityToken"
                                              }
                                            },
                                            "id": 19038,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "decimals",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 22771,
                                            "src": "2066:38:53",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_function_external_view$__$returns$_t_uint8_$",
                                              "typeString": "function () view external returns (uint8)"
                                            }
                                          },
                                          "id": 19039,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "kind": "functionCall",
                                          "lValueRequested": false,
                                          "names": [],
                                          "nodeType": "FunctionCall",
                                          "src": "2066:40:53",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint8",
                                            "typeString": "uint8"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_uint8",
                                            "typeString": "uint8"
                                          }
                                        ],
                                        "id": 19034,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "nodeType": "ElementaryTypeNameExpression",
                                        "src": "2058:7:53",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_uint256_$",
                                          "typeString": "type(uint256)"
                                        },
                                        "typeName": "uint256"
                                      },
                                      "id": 19040,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "typeConversion",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "2058:49:53",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "2054:53:53",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 19031,
                                    "name": "newBalance",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 19020,
                                    "src": "2039:10:53",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 19032,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "mul",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 22519,
                                  "src": "2039:14:53",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                    "typeString": "function (uint256,uint256) pure returns (uint256)"
                                  }
                                },
                                "id": 19042,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2039:69:53",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 19043,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "div",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 22533,
                              "src": "2039:73:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 19049,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2039:118:53",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 19050,
                            "name": "maxHolderPercentage",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18964,
                            "src": "2160:19:53",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "2039:140:53",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 19056,
                        "nodeType": "IfStatement",
                        "src": "2035:200:53",
                        "trueBody": {
                          "id": 19055,
                          "nodeType": "Block",
                          "src": "2181:54:53",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 19052,
                                  "name": "Result",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 18358,
                                  "src": "2206:6:53",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_enum$_Result_$18358_$",
                                    "typeString": "type(enum ITransferManager.Result)"
                                  }
                                },
                                "id": 19053,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberName": "INVALID",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "2206:14:53",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_enum$_Result_$18358",
                                  "typeString": "enum ITransferManager.Result"
                                }
                              },
                              "functionReturnParameters": 19008,
                              "id": 19054,
                              "nodeType": "Return",
                              "src": "2199:21:53"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 19057,
                            "name": "Result",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18358,
                            "src": "2255:6:53",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_enum$_Result_$18358_$",
                              "typeString": "type(enum ITransferManager.Result)"
                            }
                          },
                          "id": 19058,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "NA",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "2255:9:53",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_Result_$18358",
                            "typeString": "enum ITransferManager.Result"
                          }
                        },
                        "functionReturnParameters": 19008,
                        "id": 19059,
                        "nodeType": "Return",
                        "src": "2248:16:53"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 19062,
                      "name": "Result",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18358,
                      "src": "2291:6:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_enum$_Result_$18358_$",
                        "typeString": "type(enum ITransferManager.Result)"
                      }
                    },
                    "id": 19063,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "memberName": "NA",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": null,
                    "src": "2291:9:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_Result_$18358",
                      "typeString": "enum ITransferManager.Result"
                    }
                  },
                  "functionReturnParameters": 19008,
                  "id": 19064,
                  "nodeType": "Return",
                  "src": "2284:16:53"
                }
              ]
            },
            "documentation": "@notice Used to verify the transfer transaction according to the rule implemented in the trnasfer managers",
            "id": 19066,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "verifyTransfer",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 19005,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18998,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 19066,
                  "src": "1609:7:53",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 18997,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1609:7:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 19000,
                  "name": "_to",
                  "nodeType": "VariableDeclaration",
                  "scope": 19066,
                  "src": "1630:11:53",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 18999,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1630:7:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 19002,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 19066,
                  "src": "1643:15:53",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 19001,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1643:7:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 19004,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 19066,
                  "src": "1660:4:53",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 19003,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "1660:4:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1608:75:53"
            },
            "payable": false,
            "returnParameters": {
              "id": 19008,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 19007,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 19066,
                  "src": "1699:6:53",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_Result_$18358",
                    "typeString": "enum ITransferManager.Result"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 19006,
                    "name": "Result",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 18358,
                    "src": "1699:6:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_Result_$18358",
                      "typeString": "enum ITransferManager.Result"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1698:8:53"
            },
            "scope": 19202,
            "src": "1585:722:53",
            "stateMutability": "nonpayable",
            "superFunction": 18371,
            "visibility": "public"
          },
          {
            "body": {
              "id": 19077,
              "nodeType": "Block",
              "src": "2556:59:53",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 19075,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 19073,
                      "name": "maxHolderPercentage",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18964,
                      "src": "2566:19:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 19074,
                      "name": "_maxHolderPercentage",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19068,
                      "src": "2588:20:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2566:42:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 19076,
                  "nodeType": "ExpressionStatement",
                  "src": "2566:42:53"
                }
              ]
            },
            "documentation": "@notice Used to intialize the variables of the contract\n@param _maxHolderPercentage Maximum amount of ST20 tokens(in %) can hold by the investor",
            "id": 19078,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 19071,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 19070,
                  "name": "onlyFactory",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9665,
                  "src": "2544:11:53",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2544:11:53"
              }
            ],
            "name": "configure",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 19069,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 19068,
                  "name": "_maxHolderPercentage",
                  "nodeType": "VariableDeclaration",
                  "scope": 19078,
                  "src": "2507:28:53",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 19067,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2507:7:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2506:30:53"
            },
            "payable": false,
            "returnParameters": {
              "id": 19072,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2556:0:53"
            },
            "scope": 19202,
            "src": "2488:127:53",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 19089,
              "nodeType": "Block",
              "src": "2766:63:53",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "636f6e6669677572652875696e7432353629",
                            "id": 19085,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2800:20:53",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_1eb25e0a63a500d4f80783bf36f077d8e1f94a3c2db4f426b56eca35184ba63a",
                              "typeString": "literal_string \"configure(uint256)\""
                            },
                            "value": "configure(uint256)"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_stringliteral_1eb25e0a63a500d4f80783bf36f077d8e1f94a3c2db4f426b56eca35184ba63a",
                              "typeString": "literal_string \"configure(uint256)\""
                            }
                          ],
                          "id": 19084,
                          "name": "keccak256",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 23125,
                          "src": "2790:9:53",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_sha3_pure$__$returns$_t_bytes32_$",
                            "typeString": "function () pure returns (bytes32)"
                          }
                        },
                        "id": 19086,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2790:31:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 19083,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "2783:6:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_bytes4_$",
                        "typeString": "type(bytes4)"
                      },
                      "typeName": "bytes4"
                    },
                    "id": 19087,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2783:39:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes4",
                      "typeString": "bytes4"
                    }
                  },
                  "functionReturnParameters": 19082,
                  "id": 19088,
                  "nodeType": "Return",
                  "src": "2776:46:53"
                }
              ]
            },
            "documentation": "@notice This function returns the signature of configure function",
            "id": 19090,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getInitFunction",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 19079,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2734:2:53"
            },
            "payable": false,
            "returnParameters": {
              "id": 19082,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 19081,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 19090,
                  "src": "2758:6:53",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes4",
                    "typeString": "bytes4"
                  },
                  "typeName": {
                    "id": 19080,
                    "name": "bytes4",
                    "nodeType": "ElementaryTypeName",
                    "src": "2758:6:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes4",
                      "typeString": "bytes4"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2757:8:53"
            },
            "scope": 19202,
            "src": "2710:119:53",
            "stateMutability": "pure",
            "superFunction": 9594,
            "visibility": "public"
          },
          {
            "body": {
              "id": 19106,
              "nodeType": "Block",
              "src": "3099:142:53",
              "statements": [
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 19098,
                        "name": "maxHolderPercentage",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18964,
                        "src": "3140:19:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 19099,
                        "name": "_maxHolderPercentage",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 19092,
                        "src": "3161:20:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 19097,
                      "name": "LogModifyHolderPercentage",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18974,
                      "src": "3114:25:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (uint256,uint256)"
                      }
                    },
                    "id": 19100,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3114:68:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 19101,
                  "nodeType": "EmitStatement",
                  "src": "3109:73:53"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 19104,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 19102,
                      "name": "maxHolderPercentage",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18964,
                      "src": "3192:19:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 19103,
                      "name": "_maxHolderPercentage",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19092,
                      "src": "3214:20:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3192:42:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 19105,
                  "nodeType": "ExpressionStatement",
                  "src": "3192:42:53"
                }
              ]
            },
            "documentation": "@notice sets the maximum percentage that an individual token holder can hold\n@param _maxHolderPercentage is the new maximum percentage (multiplied by 10**16)",
            "id": 19107,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 19095,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 19094,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9653,
                  "src": "3089:9:53",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "3089:9:53"
              }
            ],
            "name": "changeHolderPercentage",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 19093,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 19092,
                  "name": "_maxHolderPercentage",
                  "nodeType": "VariableDeclaration",
                  "scope": 19107,
                  "src": "3052:28:53",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 19091,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3052:7:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3051:30:53"
            },
            "payable": false,
            "returnParameters": {
              "id": 19096,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3099:0:53"
            },
            "scope": 19202,
            "src": "3020:221:53",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 19131,
              "nodeType": "Block",
              "src": "3549:115:53",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 19121,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 19117,
                        "name": "whitelist",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18968,
                        "src": "3559:9:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                          "typeString": "mapping(address => bool)"
                        }
                      },
                      "id": 19119,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 19118,
                        "name": "_investor",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 19109,
                        "src": "3569:9:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "3559:20:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 19120,
                      "name": "_valid",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19111,
                      "src": "3582:6:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "3559:29:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 19122,
                  "nodeType": "ExpressionStatement",
                  "src": "3559:29:53"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 19124,
                        "name": "_investor",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 19109,
                        "src": "3622:9:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 19125,
                        "name": "now",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 23133,
                        "src": "3633:3:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 19126,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 23131,
                          "src": "3638:3:53",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 19127,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "3638:10:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 19128,
                        "name": "_valid",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 19111,
                        "src": "3650:6:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 19123,
                      "name": "LogModifyWhitelist",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18984,
                      "src": "3603:18:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_address_$_t_bool_$returns$__$",
                        "typeString": "function (address,uint256,address,bool)"
                      }
                    },
                    "id": 19129,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3603:54:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 19130,
                  "nodeType": "EmitStatement",
                  "src": "3598:59:53"
                }
              ]
            },
            "documentation": "@notice adds or removes addresses from the whitelist.\n@param _investor is the address to whitelist\n@param _valid whether or not the address it to be added or removed from the whitelist",
            "id": 19132,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 19114,
                    "name": "WHITELIST",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 18962,
                    "src": "3538:9:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 19115,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 19113,
                  "name": "withPerm",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9637,
                  "src": "3529:8:53",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$",
                    "typeString": "modifier (bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "3529:19:53"
              }
            ],
            "name": "modifyWhitelist",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 19112,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 19109,
                  "name": "_investor",
                  "nodeType": "VariableDeclaration",
                  "scope": 19132,
                  "src": "3490:17:53",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 19108,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3490:7:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 19111,
                  "name": "_valid",
                  "nodeType": "VariableDeclaration",
                  "scope": 19132,
                  "src": "3509:11:53",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 19110,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "3509:4:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3489:32:53"
            },
            "payable": false,
            "returnParameters": {
              "id": 19116,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3549:0:53"
            },
            "scope": 19202,
            "src": "3465:199:53",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 19175,
              "nodeType": "Block",
              "src": "4026:214:53",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 19149,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 19145,
                            "name": "_investors",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 19135,
                            "src": "4044:10:53",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                              "typeString": "address[] memory"
                            }
                          },
                          "id": 19146,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "4044:17:53",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 19147,
                            "name": "_valids",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 19138,
                            "src": "4065:7:53",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_bool_$dyn_memory_ptr",
                              "typeString": "bool[] memory"
                            }
                          },
                          "id": 19148,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "4065:14:53",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "4044:35:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "496e707574206172726179206c656e677468206d69732d6d61746368",
                        "id": 19150,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4081:30:53",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_8ffceeb68d13d5e60e0426e90dfd8c5f49d50ecf7083b6fbda765609a42bdc9f",
                          "typeString": "literal_string \"Input array length mis-match\""
                        },
                        "value": "Input array length mis-match"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_8ffceeb68d13d5e60e0426e90dfd8c5f49d50ecf7083b6fbda765609a42bdc9f",
                          "typeString": "literal_string \"Input array length mis-match\""
                        }
                      ],
                      "id": 19144,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23135,
                      "src": "4036:7:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 19151,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4036:76:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 19152,
                  "nodeType": "ExpressionStatement",
                  "src": "4036:76:53"
                },
                {
                  "body": {
                    "id": 19173,
                    "nodeType": "Block",
                    "src": "4167:67:53",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 19165,
                                "name": "_investors",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 19135,
                                "src": "4197:10:53",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                  "typeString": "address[] memory"
                                }
                              },
                              "id": 19167,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 19166,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 19154,
                                "src": "4208:1:53",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "4197:13:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 19168,
                                "name": "_valids",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 19138,
                                "src": "4212:7:53",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_bool_$dyn_memory_ptr",
                                  "typeString": "bool[] memory"
                                }
                              },
                              "id": 19170,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 19169,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 19154,
                                "src": "4220:1:53",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "4212:10:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 19164,
                            "name": "modifyWhitelist",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 19132,
                            "src": "4181:15:53",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bool_$returns$__$",
                              "typeString": "function (address,bool)"
                            }
                          },
                          "id": 19171,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4181:42:53",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 19172,
                        "nodeType": "ExpressionStatement",
                        "src": "4181:42:53"
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 19160,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 19157,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19154,
                      "src": "4139:1:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 19158,
                        "name": "_investors",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 19135,
                        "src": "4143:10:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        }
                      },
                      "id": 19159,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "4143:17:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "4139:21:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 19174,
                  "initializationExpression": {
                    "assignments": [
                      19154
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 19154,
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "scope": 19176,
                        "src": "4127:6:53",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 19153,
                          "name": "uint",
                          "nodeType": "ElementaryTypeName",
                          "src": "4127:4:53",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 19156,
                    "initialValue": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 19155,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "4136:1:53",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "4127:10:53"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 19162,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "4162:3:53",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 19161,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 19154,
                        "src": "4162:1:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 19163,
                    "nodeType": "ExpressionStatement",
                    "src": "4162:3:53"
                  },
                  "nodeType": "ForStatement",
                  "src": "4122:112:53"
                }
              ]
            },
            "documentation": "@notice adds or removes addresses from the whitelist.\n@param _investors Array of the addresses to whitelist\n@param _valids Array of boolean value to decide whether or not the address it to be added or removed from the whitelist",
            "id": 19176,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 19141,
                    "name": "WHITELIST",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 18962,
                    "src": "4015:9:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 19142,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 19140,
                  "name": "withPerm",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9637,
                  "src": "4006:8:53",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$",
                    "typeString": "modifier (bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "4006:19:53"
              }
            ],
            "name": "modifyWhitelistMulti",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 19139,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 19135,
                  "name": "_investors",
                  "nodeType": "VariableDeclaration",
                  "scope": 19176,
                  "src": "3961:20:53",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 19133,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "3961:7:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 19134,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "3961:9:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 19138,
                  "name": "_valids",
                  "nodeType": "VariableDeclaration",
                  "scope": 19176,
                  "src": "3983:14:53",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bool_$dyn_memory_ptr",
                    "typeString": "bool[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 19136,
                      "name": "bool",
                      "nodeType": "ElementaryTypeName",
                      "src": "3983:4:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "id": 19137,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "3983:6:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bool_$dyn_storage_ptr",
                      "typeString": "bool[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3960:38:53"
            },
            "payable": false,
            "returnParameters": {
              "id": 19143,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4026:0:53"
            },
            "scope": 19202,
            "src": "3931:309:53",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 19200,
              "nodeType": "Block",
              "src": "4415:137:53",
              "statements": [
                {
                  "assignments": [
                    19185
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 19185,
                      "name": "allPermissions",
                      "nodeType": "VariableDeclaration",
                      "scope": 19201,
                      "src": "4425:31:53",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                        "typeString": "bytes32[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 19183,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "4425:7:53",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 19184,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "4425:9:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                          "typeString": "bytes32[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 19191,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "31",
                        "id": 19189,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4473:1:53",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        }
                      ],
                      "id": 19188,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "4459:13:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_bytes32_$dyn_memory_$",
                        "typeString": "function (uint256) pure returns (bytes32[] memory)"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 19186,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "4463:7:53",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 19187,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "4463:9:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                          "typeString": "bytes32[]"
                        }
                      }
                    },
                    "id": 19190,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4459:16:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_memory",
                      "typeString": "bytes32[] memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4425:50:53"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 19196,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 19192,
                        "name": "allPermissions",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 19185,
                        "src": "4485:14:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                          "typeString": "bytes32[] memory"
                        }
                      },
                      "id": 19194,
                      "indexExpression": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 19193,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4500:1:53",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "4485:17:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 19195,
                      "name": "WHITELIST",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18962,
                      "src": "4505:9:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "4485:29:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 19197,
                  "nodeType": "ExpressionStatement",
                  "src": "4485:29:53"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 19198,
                    "name": "allPermissions",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 19185,
                    "src": "4531:14:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                      "typeString": "bytes32[] memory"
                    }
                  },
                  "functionReturnParameters": 19181,
                  "id": 19199,
                  "nodeType": "Return",
                  "src": "4524:21:53"
                }
              ]
            },
            "documentation": "@notice Return the permissions flag that are associated with Percentage transfer Manager",
            "id": 19201,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getPermissions",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 19177,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4381:2:53"
            },
            "payable": false,
            "returnParameters": {
              "id": 19181,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 19180,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 19201,
                  "src": "4404:9:53",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                    "typeString": "bytes32[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 19178,
                      "name": "bytes32",
                      "nodeType": "ElementaryTypeName",
                      "src": "4404:7:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "id": 19179,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "4404:9:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                      "typeString": "bytes32[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4403:11:53"
            },
            "scope": 19202,
            "src": "4358:194:53",
            "stateMutability": "view",
            "superFunction": 9687,
            "visibility": "public"
          }
        ],
        "scope": 19203,
        "src": "490:4065:53"
      }
    ],
    "src": "0:4556:53"
  },
  "legacyAST": {
    "absolutePath": "/Users/satyamagrawal/Repositories/testing-package/polymath-core/contracts/modules/TransferManager/PercentageTransferManager.sol",
    "exportedSymbols": {
      "PercentageTransferManager": [
        19202
      ]
    },
    "id": 19203,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 18952,
        "literals": [
          "solidity",
          "^",
          "0.4",
          ".24"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:24:53"
      },
      {
        "absolutePath": "/Users/satyamagrawal/Repositories/testing-package/polymath-core/contracts/modules/TransferManager/ITransferManager.sol",
        "file": "./ITransferManager.sol",
        "id": 18953,
        "nodeType": "ImportDirective",
        "scope": 19203,
        "sourceUnit": 18395,
        "src": "26:32:53",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "openzeppelin-solidity/contracts/math/SafeMath.sol",
        "file": "openzeppelin-solidity/contracts/math/SafeMath.sol",
        "id": 18954,
        "nodeType": "ImportDirective",
        "scope": 19203,
        "sourceUnit": 22579,
        "src": "59:59:53",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 18955,
              "name": "ITransferManager",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 18394,
              "src": "528:16:53",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ITransferManager_$18394",
                "typeString": "contract ITransferManager"
              }
            },
            "id": 18956,
            "nodeType": "InheritanceSpecifier",
            "src": "528:16:53"
          }
        ],
        "contractDependencies": [
          471,
          9717,
          18394
        ],
        "contractKind": "contract",
        "documentation": "@title Transfer Manager module for limiting percentage of token supply a single address can hold",
        "fullyImplemented": true,
        "id": 19202,
        "linearizedBaseContracts": [
          19202,
          18394,
          471,
          9717
        ],
        "name": "PercentageTransferManager",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 18959,
            "libraryName": {
              "contractScope": null,
              "id": 18957,
              "name": "SafeMath",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 22578,
              "src": "557:8:53",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_SafeMath_$22578",
                "typeString": "library SafeMath"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "551:27:53",
            "typeName": {
              "id": 18958,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "570:7:53",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            }
          },
          {
            "constant": true,
            "id": 18962,
            "name": "WHITELIST",
            "nodeType": "VariableDeclaration",
            "scope": 19202,
            "src": "634:47:53",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 18960,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "634:7:53",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "57484954454c495354",
              "id": 18961,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "670:11:53",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_0af0c3ebe77999ca20698e1ff25f812bf82409a59d21ca15a41f39e0ce9f2500",
                "typeString": "literal_string \"WHITELIST\""
              },
              "value": "WHITELIST"
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 18964,
            "name": "maxHolderPercentage",
            "nodeType": "VariableDeclaration",
            "scope": 19202,
            "src": "787:34:53",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 18963,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "787:7:53",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 18968,
            "name": "whitelist",
            "nodeType": "VariableDeclaration",
            "scope": 19202,
            "src": "899:42:53",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
              "typeString": "mapping(address => bool)"
            },
            "typeName": {
              "id": 18967,
              "keyType": {
                "id": 18965,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "908:7:53",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "899:25:53",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                "typeString": "mapping(address => bool)"
              },
              "valueType": {
                "id": 18966,
                "name": "bool",
                "nodeType": "ElementaryTypeName",
                "src": "919:4:53",
                "typeDescriptions": {
                  "typeIdentifier": "t_bool",
                  "typeString": "bool"
                }
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 18974,
            "name": "LogModifyHolderPercentage",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 18973,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18970,
                  "indexed": false,
                  "name": "_oldHolderPercentage",
                  "nodeType": "VariableDeclaration",
                  "scope": 18974,
                  "src": "980:28:53",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 18969,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "980:7:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18972,
                  "indexed": false,
                  "name": "_newHolderPercentage",
                  "nodeType": "VariableDeclaration",
                  "scope": 18974,
                  "src": "1010:28:53",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 18971,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1010:7:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "979:60:53"
            },
            "src": "948:92:53"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 18984,
            "name": "LogModifyWhitelist",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 18983,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18976,
                  "indexed": false,
                  "name": "_investor",
                  "nodeType": "VariableDeclaration",
                  "scope": 18984,
                  "src": "1079:17:53",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 18975,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1079:7:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18978,
                  "indexed": false,
                  "name": "_dateAdded",
                  "nodeType": "VariableDeclaration",
                  "scope": 18984,
                  "src": "1106:18:53",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 18977,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1106:7:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18980,
                  "indexed": false,
                  "name": "_addedBy",
                  "nodeType": "VariableDeclaration",
                  "scope": 18984,
                  "src": "1134:16:53",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 18979,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1134:7:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18982,
                  "indexed": false,
                  "name": "_valid",
                  "nodeType": "VariableDeclaration",
                  "scope": 18984,
                  "src": "1160:14:53",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 18981,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "1160:4:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1069:111:53"
            },
            "src": "1045:136:53"
          },
          {
            "body": {
              "id": 18995,
              "nodeType": "Block",
              "src": "1457:7:53",
              "statements": []
            },
            "documentation": "@notice Constructor\n@param _securityToken Address of the security token\n@param _polyAddress Address of the polytoken",
            "id": 18996,
            "implemented": true,
            "isConstructor": true,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 18991,
                    "name": "_securityToken",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 18986,
                    "src": "1423:14:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 18992,
                    "name": "_polyAddress",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 18988,
                    "src": "1439:12:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 18993,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 18990,
                  "name": "IModule",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9717,
                  "src": "1415:7:53",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_IModule_$9717_$",
                    "typeString": "type(contract IModule)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1415:37:53"
              }
            ],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 18989,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18986,
                  "name": "_securityToken",
                  "nodeType": "VariableDeclaration",
                  "scope": 18996,
                  "src": "1354:22:53",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 18985,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1354:7:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18988,
                  "name": "_polyAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 18996,
                  "src": "1378:20:53",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 18987,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1378:7:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1353:46:53"
            },
            "payable": false,
            "returnParameters": {
              "id": 18994,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1457:0:53"
            },
            "scope": 19202,
            "src": "1341:123:53",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 19065,
              "nodeType": "Block",
              "src": "1707:600:53",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "id": 19010,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "1721:7:53",
                    "subExpression": {
                      "argumentTypes": null,
                      "id": 19009,
                      "name": "paused",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 423,
                      "src": "1722:6:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 19061,
                  "nodeType": "IfStatement",
                  "src": "1717:558:53",
                  "trueBody": {
                    "id": 19060,
                    "nodeType": "Block",
                    "src": "1730:545:53",
                    "statements": [
                      {
                        "condition": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 19011,
                            "name": "whitelist",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18968,
                            "src": "1865:9:53",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                              "typeString": "mapping(address => bool)"
                            }
                          },
                          "id": 19013,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 19012,
                            "name": "_to",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 19000,
                            "src": "1875:3:53",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "1865:14:53",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 19018,
                        "nodeType": "IfStatement",
                        "src": "1861:69:53",
                        "trueBody": {
                          "id": 19017,
                          "nodeType": "Block",
                          "src": "1881:49:53",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 19014,
                                  "name": "Result",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 18358,
                                  "src": "1906:6:53",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_enum$_Result_$18358_$",
                                    "typeString": "type(enum ITransferManager.Result)"
                                  }
                                },
                                "id": 19015,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberName": "NA",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "1906:9:53",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_enum$_Result_$18358",
                                  "typeString": "enum ITransferManager.Result"
                                }
                              },
                              "functionReturnParameters": 19008,
                              "id": 19016,
                              "nodeType": "Return",
                              "src": "1899:16:53"
                            }
                          ]
                        }
                      },
                      {
                        "assignments": [
                          19020
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 19020,
                            "name": "newBalance",
                            "nodeType": "VariableDeclaration",
                            "scope": 19066,
                            "src": "1943:18:53",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 19019,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "1943:7:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 19030,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 19028,
                              "name": "_amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 19002,
                              "src": "2013:7:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 19025,
                                  "name": "_to",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 19000,
                                  "src": "2004:3:53",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 19022,
                                      "name": "securityToken",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 9561,
                                      "src": "1979:13:53",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    ],
                                    "id": 19021,
                                    "name": "ISecurityToken",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 10159,
                                    "src": "1964:14:53",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_contract$_ISecurityToken_$10159_$",
                                      "typeString": "type(contract ISecurityToken)"
                                    }
                                  },
                                  "id": 19023,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "1964:29:53",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_ISecurityToken_$10159",
                                    "typeString": "contract ISecurityToken"
                                  }
                                },
                                "id": 19024,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "balanceOf",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 22759,
                                "src": "1964:39:53",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                                  "typeString": "function (address) view external returns (uint256)"
                                }
                              },
                              "id": 19026,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1964:44:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 19027,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "add",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 22577,
                            "src": "1964:48:53",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                              "typeString": "function (uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 19029,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1964:57:53",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "1943:78:53"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 19051,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "expression": {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "id": 19045,
                                        "name": "securityToken",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 9561,
                                        "src": "2128:13:53",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      ],
                                      "id": 19044,
                                      "name": "ISecurityToken",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 10159,
                                      "src": "2113:14:53",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_ISecurityToken_$10159_$",
                                        "typeString": "type(contract ISecurityToken)"
                                      }
                                    },
                                    "id": 19046,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "2113:29:53",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_ISecurityToken_$10159",
                                      "typeString": "contract ISecurityToken"
                                    }
                                  },
                                  "id": 19047,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "totalSupply",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 22687,
                                  "src": "2113:41:53",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$",
                                    "typeString": "function () view external returns (uint256)"
                                  }
                                },
                                "id": 19048,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2113:43:53",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 19041,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "argumentTypes": null,
                                      "hexValue": "3130",
                                      "id": 19033,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "2054:2:53",
                                      "subdenomination": null,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_10_by_1",
                                        "typeString": "int_const 10"
                                      },
                                      "value": "10"
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "**",
                                    "rightExpression": {
                                      "argumentTypes": null,
                                      "arguments": [
                                        {
                                          "argumentTypes": null,
                                          "arguments": [],
                                          "expression": {
                                            "argumentTypes": [],
                                            "expression": {
                                              "argumentTypes": null,
                                              "arguments": [
                                                {
                                                  "argumentTypes": null,
                                                  "id": 19036,
                                                  "name": "securityToken",
                                                  "nodeType": "Identifier",
                                                  "overloadedDeclarations": [],
                                                  "referencedDeclaration": 9561,
                                                  "src": "2081:13:53",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                  }
                                                }
                                              ],
                                              "expression": {
                                                "argumentTypes": [
                                                  {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                  }
                                                ],
                                                "id": 19035,
                                                "name": "ISecurityToken",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 10159,
                                                "src": "2066:14:53",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_type$_t_contract$_ISecurityToken_$10159_$",
                                                  "typeString": "type(contract ISecurityToken)"
                                                }
                                              },
                                              "id": 19037,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "kind": "typeConversion",
                                              "lValueRequested": false,
                                              "names": [],
                                              "nodeType": "FunctionCall",
                                              "src": "2066:29:53",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_contract$_ISecurityToken_$10159",
                                                "typeString": "contract ISecurityToken"
                                              }
                                            },
                                            "id": 19038,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "decimals",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 22771,
                                            "src": "2066:38:53",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_function_external_view$__$returns$_t_uint8_$",
                                              "typeString": "function () view external returns (uint8)"
                                            }
                                          },
                                          "id": 19039,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "kind": "functionCall",
                                          "lValueRequested": false,
                                          "names": [],
                                          "nodeType": "FunctionCall",
                                          "src": "2066:40:53",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint8",
                                            "typeString": "uint8"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_uint8",
                                            "typeString": "uint8"
                                          }
                                        ],
                                        "id": 19034,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "nodeType": "ElementaryTypeNameExpression",
                                        "src": "2058:7:53",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_uint256_$",
                                          "typeString": "type(uint256)"
                                        },
                                        "typeName": "uint256"
                                      },
                                      "id": 19040,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "typeConversion",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "2058:49:53",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "2054:53:53",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 19031,
                                    "name": "newBalance",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 19020,
                                    "src": "2039:10:53",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 19032,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "mul",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 22519,
                                  "src": "2039:14:53",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                    "typeString": "function (uint256,uint256) pure returns (uint256)"
                                  }
                                },
                                "id": 19042,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2039:69:53",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 19043,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "div",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 22533,
                              "src": "2039:73:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 19049,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2039:118:53",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 19050,
                            "name": "maxHolderPercentage",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18964,
                            "src": "2160:19:53",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "2039:140:53",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 19056,
                        "nodeType": "IfStatement",
                        "src": "2035:200:53",
                        "trueBody": {
                          "id": 19055,
                          "nodeType": "Block",
                          "src": "2181:54:53",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 19052,
                                  "name": "Result",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 18358,
                                  "src": "2206:6:53",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_enum$_Result_$18358_$",
                                    "typeString": "type(enum ITransferManager.Result)"
                                  }
                                },
                                "id": 19053,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberName": "INVALID",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "2206:14:53",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_enum$_Result_$18358",
                                  "typeString": "enum ITransferManager.Result"
                                }
                              },
                              "functionReturnParameters": 19008,
                              "id": 19054,
                              "nodeType": "Return",
                              "src": "2199:21:53"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 19057,
                            "name": "Result",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18358,
                            "src": "2255:6:53",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_enum$_Result_$18358_$",
                              "typeString": "type(enum ITransferManager.Result)"
                            }
                          },
                          "id": 19058,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "NA",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "2255:9:53",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_Result_$18358",
                            "typeString": "enum ITransferManager.Result"
                          }
                        },
                        "functionReturnParameters": 19008,
                        "id": 19059,
                        "nodeType": "Return",
                        "src": "2248:16:53"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 19062,
                      "name": "Result",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18358,
                      "src": "2291:6:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_enum$_Result_$18358_$",
                        "typeString": "type(enum ITransferManager.Result)"
                      }
                    },
                    "id": 19063,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "memberName": "NA",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": null,
                    "src": "2291:9:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_Result_$18358",
                      "typeString": "enum ITransferManager.Result"
                    }
                  },
                  "functionReturnParameters": 19008,
                  "id": 19064,
                  "nodeType": "Return",
                  "src": "2284:16:53"
                }
              ]
            },
            "documentation": "@notice Used to verify the transfer transaction according to the rule implemented in the trnasfer managers",
            "id": 19066,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "verifyTransfer",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 19005,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18998,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 19066,
                  "src": "1609:7:53",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 18997,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1609:7:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 19000,
                  "name": "_to",
                  "nodeType": "VariableDeclaration",
                  "scope": 19066,
                  "src": "1630:11:53",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 18999,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1630:7:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 19002,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 19066,
                  "src": "1643:15:53",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 19001,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1643:7:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 19004,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 19066,
                  "src": "1660:4:53",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 19003,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "1660:4:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1608:75:53"
            },
            "payable": false,
            "returnParameters": {
              "id": 19008,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 19007,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 19066,
                  "src": "1699:6:53",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_Result_$18358",
                    "typeString": "enum ITransferManager.Result"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 19006,
                    "name": "Result",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 18358,
                    "src": "1699:6:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_Result_$18358",
                      "typeString": "enum ITransferManager.Result"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1698:8:53"
            },
            "scope": 19202,
            "src": "1585:722:53",
            "stateMutability": "nonpayable",
            "superFunction": 18371,
            "visibility": "public"
          },
          {
            "body": {
              "id": 19077,
              "nodeType": "Block",
              "src": "2556:59:53",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 19075,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 19073,
                      "name": "maxHolderPercentage",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18964,
                      "src": "2566:19:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 19074,
                      "name": "_maxHolderPercentage",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19068,
                      "src": "2588:20:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2566:42:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 19076,
                  "nodeType": "ExpressionStatement",
                  "src": "2566:42:53"
                }
              ]
            },
            "documentation": "@notice Used to intialize the variables of the contract\n@param _maxHolderPercentage Maximum amount of ST20 tokens(in %) can hold by the investor",
            "id": 19078,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 19071,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 19070,
                  "name": "onlyFactory",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9665,
                  "src": "2544:11:53",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2544:11:53"
              }
            ],
            "name": "configure",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 19069,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 19068,
                  "name": "_maxHolderPercentage",
                  "nodeType": "VariableDeclaration",
                  "scope": 19078,
                  "src": "2507:28:53",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 19067,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2507:7:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2506:30:53"
            },
            "payable": false,
            "returnParameters": {
              "id": 19072,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2556:0:53"
            },
            "scope": 19202,
            "src": "2488:127:53",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 19089,
              "nodeType": "Block",
              "src": "2766:63:53",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "636f6e6669677572652875696e7432353629",
                            "id": 19085,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2800:20:53",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_1eb25e0a63a500d4f80783bf36f077d8e1f94a3c2db4f426b56eca35184ba63a",
                              "typeString": "literal_string \"configure(uint256)\""
                            },
                            "value": "configure(uint256)"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_stringliteral_1eb25e0a63a500d4f80783bf36f077d8e1f94a3c2db4f426b56eca35184ba63a",
                              "typeString": "literal_string \"configure(uint256)\""
                            }
                          ],
                          "id": 19084,
                          "name": "keccak256",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 23125,
                          "src": "2790:9:53",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_sha3_pure$__$returns$_t_bytes32_$",
                            "typeString": "function () pure returns (bytes32)"
                          }
                        },
                        "id": 19086,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2790:31:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 19083,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "2783:6:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_bytes4_$",
                        "typeString": "type(bytes4)"
                      },
                      "typeName": "bytes4"
                    },
                    "id": 19087,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2783:39:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes4",
                      "typeString": "bytes4"
                    }
                  },
                  "functionReturnParameters": 19082,
                  "id": 19088,
                  "nodeType": "Return",
                  "src": "2776:46:53"
                }
              ]
            },
            "documentation": "@notice This function returns the signature of configure function",
            "id": 19090,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getInitFunction",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 19079,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2734:2:53"
            },
            "payable": false,
            "returnParameters": {
              "id": 19082,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 19081,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 19090,
                  "src": "2758:6:53",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes4",
                    "typeString": "bytes4"
                  },
                  "typeName": {
                    "id": 19080,
                    "name": "bytes4",
                    "nodeType": "ElementaryTypeName",
                    "src": "2758:6:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes4",
                      "typeString": "bytes4"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2757:8:53"
            },
            "scope": 19202,
            "src": "2710:119:53",
            "stateMutability": "pure",
            "superFunction": 9594,
            "visibility": "public"
          },
          {
            "body": {
              "id": 19106,
              "nodeType": "Block",
              "src": "3099:142:53",
              "statements": [
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 19098,
                        "name": "maxHolderPercentage",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18964,
                        "src": "3140:19:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 19099,
                        "name": "_maxHolderPercentage",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 19092,
                        "src": "3161:20:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 19097,
                      "name": "LogModifyHolderPercentage",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18974,
                      "src": "3114:25:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (uint256,uint256)"
                      }
                    },
                    "id": 19100,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3114:68:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 19101,
                  "nodeType": "EmitStatement",
                  "src": "3109:73:53"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 19104,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 19102,
                      "name": "maxHolderPercentage",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18964,
                      "src": "3192:19:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 19103,
                      "name": "_maxHolderPercentage",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19092,
                      "src": "3214:20:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3192:42:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 19105,
                  "nodeType": "ExpressionStatement",
                  "src": "3192:42:53"
                }
              ]
            },
            "documentation": "@notice sets the maximum percentage that an individual token holder can hold\n@param _maxHolderPercentage is the new maximum percentage (multiplied by 10**16)",
            "id": 19107,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 19095,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 19094,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9653,
                  "src": "3089:9:53",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "3089:9:53"
              }
            ],
            "name": "changeHolderPercentage",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 19093,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 19092,
                  "name": "_maxHolderPercentage",
                  "nodeType": "VariableDeclaration",
                  "scope": 19107,
                  "src": "3052:28:53",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 19091,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3052:7:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3051:30:53"
            },
            "payable": false,
            "returnParameters": {
              "id": 19096,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3099:0:53"
            },
            "scope": 19202,
            "src": "3020:221:53",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 19131,
              "nodeType": "Block",
              "src": "3549:115:53",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 19121,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 19117,
                        "name": "whitelist",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18968,
                        "src": "3559:9:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                          "typeString": "mapping(address => bool)"
                        }
                      },
                      "id": 19119,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 19118,
                        "name": "_investor",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 19109,
                        "src": "3569:9:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "3559:20:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 19120,
                      "name": "_valid",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19111,
                      "src": "3582:6:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "3559:29:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 19122,
                  "nodeType": "ExpressionStatement",
                  "src": "3559:29:53"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 19124,
                        "name": "_investor",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 19109,
                        "src": "3622:9:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 19125,
                        "name": "now",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 23133,
                        "src": "3633:3:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 19126,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 23131,
                          "src": "3638:3:53",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 19127,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "3638:10:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 19128,
                        "name": "_valid",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 19111,
                        "src": "3650:6:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 19123,
                      "name": "LogModifyWhitelist",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18984,
                      "src": "3603:18:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_address_$_t_bool_$returns$__$",
                        "typeString": "function (address,uint256,address,bool)"
                      }
                    },
                    "id": 19129,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3603:54:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 19130,
                  "nodeType": "EmitStatement",
                  "src": "3598:59:53"
                }
              ]
            },
            "documentation": "@notice adds or removes addresses from the whitelist.\n@param _investor is the address to whitelist\n@param _valid whether or not the address it to be added or removed from the whitelist",
            "id": 19132,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 19114,
                    "name": "WHITELIST",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 18962,
                    "src": "3538:9:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 19115,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 19113,
                  "name": "withPerm",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9637,
                  "src": "3529:8:53",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$",
                    "typeString": "modifier (bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "3529:19:53"
              }
            ],
            "name": "modifyWhitelist",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 19112,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 19109,
                  "name": "_investor",
                  "nodeType": "VariableDeclaration",
                  "scope": 19132,
                  "src": "3490:17:53",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 19108,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3490:7:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 19111,
                  "name": "_valid",
                  "nodeType": "VariableDeclaration",
                  "scope": 19132,
                  "src": "3509:11:53",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 19110,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "3509:4:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3489:32:53"
            },
            "payable": false,
            "returnParameters": {
              "id": 19116,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3549:0:53"
            },
            "scope": 19202,
            "src": "3465:199:53",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 19175,
              "nodeType": "Block",
              "src": "4026:214:53",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 19149,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 19145,
                            "name": "_investors",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 19135,
                            "src": "4044:10:53",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                              "typeString": "address[] memory"
                            }
                          },
                          "id": 19146,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "4044:17:53",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 19147,
                            "name": "_valids",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 19138,
                            "src": "4065:7:53",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_bool_$dyn_memory_ptr",
                              "typeString": "bool[] memory"
                            }
                          },
                          "id": 19148,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "4065:14:53",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "4044:35:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "496e707574206172726179206c656e677468206d69732d6d61746368",
                        "id": 19150,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4081:30:53",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_8ffceeb68d13d5e60e0426e90dfd8c5f49d50ecf7083b6fbda765609a42bdc9f",
                          "typeString": "literal_string \"Input array length mis-match\""
                        },
                        "value": "Input array length mis-match"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_8ffceeb68d13d5e60e0426e90dfd8c5f49d50ecf7083b6fbda765609a42bdc9f",
                          "typeString": "literal_string \"Input array length mis-match\""
                        }
                      ],
                      "id": 19144,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23135,
                      "src": "4036:7:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 19151,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4036:76:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 19152,
                  "nodeType": "ExpressionStatement",
                  "src": "4036:76:53"
                },
                {
                  "body": {
                    "id": 19173,
                    "nodeType": "Block",
                    "src": "4167:67:53",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 19165,
                                "name": "_investors",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 19135,
                                "src": "4197:10:53",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                  "typeString": "address[] memory"
                                }
                              },
                              "id": 19167,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 19166,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 19154,
                                "src": "4208:1:53",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "4197:13:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 19168,
                                "name": "_valids",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 19138,
                                "src": "4212:7:53",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_bool_$dyn_memory_ptr",
                                  "typeString": "bool[] memory"
                                }
                              },
                              "id": 19170,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 19169,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 19154,
                                "src": "4220:1:53",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "4212:10:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 19164,
                            "name": "modifyWhitelist",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 19132,
                            "src": "4181:15:53",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bool_$returns$__$",
                              "typeString": "function (address,bool)"
                            }
                          },
                          "id": 19171,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4181:42:53",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 19172,
                        "nodeType": "ExpressionStatement",
                        "src": "4181:42:53"
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 19160,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 19157,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19154,
                      "src": "4139:1:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 19158,
                        "name": "_investors",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 19135,
                        "src": "4143:10:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        }
                      },
                      "id": 19159,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "4143:17:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "4139:21:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 19174,
                  "initializationExpression": {
                    "assignments": [
                      19154
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 19154,
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "scope": 19176,
                        "src": "4127:6:53",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 19153,
                          "name": "uint",
                          "nodeType": "ElementaryTypeName",
                          "src": "4127:4:53",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 19156,
                    "initialValue": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 19155,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "4136:1:53",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "4127:10:53"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 19162,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "4162:3:53",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 19161,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 19154,
                        "src": "4162:1:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 19163,
                    "nodeType": "ExpressionStatement",
                    "src": "4162:3:53"
                  },
                  "nodeType": "ForStatement",
                  "src": "4122:112:53"
                }
              ]
            },
            "documentation": "@notice adds or removes addresses from the whitelist.\n@param _investors Array of the addresses to whitelist\n@param _valids Array of boolean value to decide whether or not the address it to be added or removed from the whitelist",
            "id": 19176,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 19141,
                    "name": "WHITELIST",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 18962,
                    "src": "4015:9:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 19142,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 19140,
                  "name": "withPerm",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9637,
                  "src": "4006:8:53",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$",
                    "typeString": "modifier (bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "4006:19:53"
              }
            ],
            "name": "modifyWhitelistMulti",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 19139,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 19135,
                  "name": "_investors",
                  "nodeType": "VariableDeclaration",
                  "scope": 19176,
                  "src": "3961:20:53",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 19133,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "3961:7:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 19134,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "3961:9:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 19138,
                  "name": "_valids",
                  "nodeType": "VariableDeclaration",
                  "scope": 19176,
                  "src": "3983:14:53",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bool_$dyn_memory_ptr",
                    "typeString": "bool[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 19136,
                      "name": "bool",
                      "nodeType": "ElementaryTypeName",
                      "src": "3983:4:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "id": 19137,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "3983:6:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bool_$dyn_storage_ptr",
                      "typeString": "bool[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3960:38:53"
            },
            "payable": false,
            "returnParameters": {
              "id": 19143,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4026:0:53"
            },
            "scope": 19202,
            "src": "3931:309:53",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 19200,
              "nodeType": "Block",
              "src": "4415:137:53",
              "statements": [
                {
                  "assignments": [
                    19185
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 19185,
                      "name": "allPermissions",
                      "nodeType": "VariableDeclaration",
                      "scope": 19201,
                      "src": "4425:31:53",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                        "typeString": "bytes32[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 19183,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "4425:7:53",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 19184,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "4425:9:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                          "typeString": "bytes32[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 19191,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "31",
                        "id": 19189,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4473:1:53",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        }
                      ],
                      "id": 19188,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "4459:13:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_bytes32_$dyn_memory_$",
                        "typeString": "function (uint256) pure returns (bytes32[] memory)"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 19186,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "4463:7:53",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 19187,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "4463:9:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                          "typeString": "bytes32[]"
                        }
                      }
                    },
                    "id": 19190,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4459:16:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_memory",
                      "typeString": "bytes32[] memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4425:50:53"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 19196,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 19192,
                        "name": "allPermissions",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 19185,
                        "src": "4485:14:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                          "typeString": "bytes32[] memory"
                        }
                      },
                      "id": 19194,
                      "indexExpression": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 19193,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4500:1:53",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "4485:17:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 19195,
                      "name": "WHITELIST",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18962,
                      "src": "4505:9:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "4485:29:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 19197,
                  "nodeType": "ExpressionStatement",
                  "src": "4485:29:53"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 19198,
                    "name": "allPermissions",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 19185,
                    "src": "4531:14:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                      "typeString": "bytes32[] memory"
                    }
                  },
                  "functionReturnParameters": 19181,
                  "id": 19199,
                  "nodeType": "Return",
                  "src": "4524:21:53"
                }
              ]
            },
            "documentation": "@notice Return the permissions flag that are associated with Percentage transfer Manager",
            "id": 19201,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getPermissions",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 19177,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4381:2:53"
            },
            "payable": false,
            "returnParameters": {
              "id": 19181,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 19180,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 19201,
                  "src": "4404:9:53",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                    "typeString": "bytes32[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 19178,
                      "name": "bytes32",
                      "nodeType": "ElementaryTypeName",
                      "src": "4404:7:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "id": 19179,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "4404:9:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                      "typeString": "bytes32[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4403:11:53"
            },
            "scope": 19202,
            "src": "4358:194:53",
            "stateMutability": "view",
            "superFunction": 9687,
            "visibility": "public"
          }
        ],
        "scope": 19203,
        "src": "490:4065:53"
      }
    ],
    "src": "0:4556:53"
  },
  "compiler": {
    "name": "solc",
    "version": "0.4.24+commit.e67f0147.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "2.0.1",
  "updatedAt": "2018-08-21T09:48:12.666Z"
}