{
  "contractName": "Identity",
  "abi": [
    {
      "inputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "BlacklistAdded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "BlacklistRemoved",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "ContractAdded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "ContractRemoved",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "IdentityAdminAdded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "IdentityAdminRemoved",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "Paused",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "PauserAdded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "PauserRemoved",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "Unpaused",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "WhitelistedAdded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "WhitelistedRemoved",
      "type": "event"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "addIdentityAdmin",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "addPauser",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "addrToDID",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "authenticationPeriod",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "dateAdded",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "dateAuthenticated",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "didHashToAddress",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "isIdentityAdmin",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "isOwner",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "isPauser",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "isRegistered",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "scheme",
          "type": "address"
        }
      ],
      "name": "isRegistered",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "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": "paused",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "removeIdentityAdmin",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "renounceIdentityAdmin",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "renouncePauser",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "contract Avatar",
          "name": "_avatar",
          "type": "address"
        }
      ],
      "name": "setAvatar",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "unpause",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "whitelistedContracts",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "whitelistedCount",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "period",
          "type": "uint256"
        }
      ],
      "name": "setAuthenticationPeriod",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "authenticate",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "addWhitelisted",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "internalType": "string",
          "name": "did",
          "type": "string"
        }
      ],
      "name": "addWhitelistedWithDID",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "removeWhitelisted",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "renounceWhitelisted",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "isWhitelisted",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "lastAuthenticated",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "addBlacklisted",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "removeBlacklisted",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "addContract",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "removeContract",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "isDAOContract",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "isBlacklisted",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.5.16+commit.9c3226ce\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"BlacklistAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"BlacklistRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"ContractAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"ContractRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"IdentityAdminAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"IdentityAdminRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"PauserAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"PauserRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"WhitelistedAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"WhitelistedRemoved\",\"type\":\"event\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"addBlacklisted\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"addContract\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"addIdentityAdmin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"addPauser\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"addWhitelisted\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"did\",\"type\":\"string\"}],\"name\":\"addWhitelistedWithDID\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"addrToDID\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"authenticate\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"authenticationPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"dateAdded\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"dateAuthenticated\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"didHashToAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isBlacklisted\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isDAOContract\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isIdentityAdmin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"isOwner\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isPauser\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"isRegistered\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"scheme\",\"type\":\"address\"}],\"name\":\"isRegistered\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isWhitelisted\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"lastAuthenticated\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"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\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"removeBlacklisted\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"removeContract\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"removeIdentityAdmin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"removeWhitelisted\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"renounceIdentityAdmin\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"renouncePauser\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"renounceWhitelisted\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"period\",\"type\":\"uint256\"}],\"name\":\"setAuthenticationPeriod\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"contract Avatar\",\"name\":\"_avatar\",\"type\":\"address\"}],\"name\":\"setAvatar\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"whitelistedContracts\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"whitelistedCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"methods\":{\"addIdentityAdmin(address)\":{\"details\":\"Adds a identity admin account. Is only callable by owner.\",\"params\":{\"account\":\"Address to be added\"},\"return\":\"true if successful\"},\"isIdentityAdmin(address)\":{\"details\":\"Checks if account is identity admin\",\"params\":{\"account\":\"Account to check\"},\"return\":\"Boolean indicating if account is identity admin\"},\"isOwner()\":{\"return\":\"true if `msg.sender` is the owner of the contract.\"},\"isRegistered()\":{\"details\":\"function to see if an avatar has been set and if this scheme is registered\",\"return\":\"true if scheme is registered\"},\"isRegistered(address)\":{\"details\":\"function to see if an avatar has been set and if this scheme is registered\",\"return\":\"true if scheme is registered\"},\"owner()\":{\"return\":\"the address of the owner.\"},\"pause()\":{\"details\":\"called by the owner to pause, triggers stopped state\"},\"paused()\":{\"return\":\"true if the contract is paused, false otherwise.\"},\"removeIdentityAdmin(address)\":{\"details\":\"Removes a identity admin account. Is only callable by owner.\",\"params\":{\"account\":\"Address to be removed\"},\"return\":\"true if successful\"},\"renounceIdentityAdmin()\":{\"details\":\"Allows an admin to renounce their role\"},\"renounceOwnership()\":{\"details\":\"Allows the current owner to relinquish control of the contract.\"},\"setAvatar(address)\":{\"details\":\"Function to set a new avatar and controller for scheme can only be done by owner of scheme\"},\"transferOwnership(address)\":{\"details\":\"Allows the current owner to transfer control of the contract to a newOwner.\",\"params\":{\"newOwner\":\"The address to transfer ownership to.\"}},\"unpause()\":{\"details\":\"called by the owner to unpause, returns to normal state\"}}},\"userdoc\":{\"methods\":{\"renounceOwnership()\":{\"notice\":\"Renouncing to ownership will leave the contract without an owner. It will not be possible to call the functions with the `onlyOwner` modifier anymore.\"}}}},\"settings\":{\"compilationTarget\":{\"/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/identity/Identity.sol\":\"Identity\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/dao/schemes/SchemeGuard.sol\":{\"keccak256\":\"0x32e1b2a172e2c22a6aa757bfcb0722cc67f64c5c2e48df3dec2737903516d565\",\"urls\":[\"bzz-raw://bee57a8eba08348e93a0c18f3ab534e67865c0fa27afe27f5cf234bd5f248915\",\"dweb:/ipfs/Qmd8aveHWcUkYWMyJrJRZPyVXj8MAMBfpBFo6g4Z2VJeo3\"]},\"/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/identity/Identity.sol\":{\"keccak256\":\"0x282184478f1d618d3523b28a84a7f7003dfdc99cad120e5e358d2cce1f5fb491\",\"urls\":[\"bzz-raw://67e17ecb57b24c4fb801abc2c52c3148af3b967e28da4fb7e074d18efb7a57c1\",\"dweb:/ipfs/QmfZ8jXhdTHtxr3gfByRj4HnXnGynX7SLZWWGR8k768aGB\"]},\"/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/identity/IdentityAdminRole.sol\":{\"keccak256\":\"0x8e82c45eefe0da77d017144dfad12602c68124297035937901cdd08ce48c57ff\",\"urls\":[\"bzz-raw://e20e606342b3b35f41a081294cf3f716fe7e27e81d3090daa37c5208f4ef4bc3\",\"dweb:/ipfs/QmVEhHpiwVsksnPyHkfNa5LpTBLxoP9kj5NRZUBv456ewK\"]},\"@daostack/arc/contracts/controller/Avatar.sol\":{\"keccak256\":\"0x4e4fb9d3bc21f42fbfc6a01e9f8aa483a59e9f447b0d604f55b587a81ec09ef4\",\"urls\":[\"bzz-raw://9d3c1c7575cf6075ea1d89921f09b9b8e322b208dacaf0446cd4f64506c999f0\",\"dweb:/ipfs/QmVGDDHAR2ByuQpbgV7BBKXGEAcbaWvejpEZYzHgaagBFK\"]},\"@daostack/arc/contracts/controller/ControllerInterface.sol\":{\"keccak256\":\"0x933e92612c90f292c7b59908958b003f1a13d90b97bed0572b566353c20974dc\",\"urls\":[\"bzz-raw://ce1fcf85b744fcce2dbd4205e3943e9b4ec36a5f0330d4bbf61e65f1a3e0e470\",\"dweb:/ipfs/QmUWiLkBDdekhpy93nTzBtxDHL6yNh6sTUM9G8VbsHcBzy\"]},\"@daostack/arc/contracts/controller/DAOToken.sol\":{\"keccak256\":\"0x9b213e4e3ceeffcfc1c962a43b70b8d763d8091a2dd713fc1989b97bb68786e6\",\"urls\":[\"bzz-raw://51d1d6e85fd90f45395a16b7a3c703c4636e836041f2a13f806e4222ef2e59c1\",\"dweb:/ipfs/QmQjeCeFf7TJzsYjT5scyZUDDixBA8Yy8YppgBuxcKPDnP\"]},\"@daostack/arc/contracts/globalConstraints/GlobalConstraintInterface.sol\":{\"keccak256\":\"0xc006c4591ec10b845a56e13f6791db2c428610953034686d52b2a934b6c8f36f\",\"urls\":[\"bzz-raw://19495cd88280e54d7ddcd043ffeff75e6d3777a0c42debcd61cae448e9497ea0\",\"dweb:/ipfs/QmYxWz7CgFmmddrcVXJKfob5Ktwykc2imNVUwLSR5WR8bJ\"]},\"@daostack/arc/contracts/libs/SafeERC20.sol\":{\"keccak256\":\"0xf6727d432f67046145b078f40c1cc4f6be7b0d12a6678ecaf457edf7550d244c\",\"urls\":[\"bzz-raw://5dba7734c4fed446c084a707761cbc66ba22b8b93ef53c8d4a22a76b6e271690\",\"dweb:/ipfs/QmP2VpPKUqLh4ZZs6LaxHVpCN1zCmiorygL9bMub4mbYCw\"]},\"@daostack/infra/contracts/Reputation.sol\":{\"keccak256\":\"0x3d226dac0fe7d758f0287fb28bc25fcec1f69d19888ae3a550fa49856d61c482\",\"urls\":[\"bzz-raw://8856852c8fe0ba1c9aab326f0a9a6e7f31a238de2778fa5188e6fc399f7eb352\",\"dweb:/ipfs/QmVH4ppR9Dk7v8yxaSgeArdMv9gBBVoQxEf4E3UsqQ4rY2\"]},\"openzeppelin-solidity/contracts/access/Roles.sol\":{\"keccak256\":\"0x659ba0f9a3392cd50a8a5fafaf5dfd8c6a0878f6a4613bceff4e90dceddcd865\",\"urls\":[\"bzz-raw://4ca6617349a9b36fd82e9442a8e445ce9021a174e4399d1457ddc894ee3f5df3\",\"dweb:/ipfs/QmcmyB4cNazZ1sw963Afaijt67M9bDgwmGXCgQajGTD4tm\"]},\"openzeppelin-solidity/contracts/access/roles/PauserRole.sol\":{\"keccak256\":\"0x6506133e295a7199df2ac5dfc52853d9d767f68450b6d0193e9d8056b164ce86\",\"urls\":[\"bzz-raw://9c03592a9e6b1377e401b74eccf175a250232b5a341347d3fc5cb50e9bc86ba2\",\"dweb:/ipfs/QmYAr1yXT89hNUMJ37aiBpD9HtYfBDqmueVCzphRuuU7oZ\"]},\"openzeppelin-solidity/contracts/lifecycle/Pausable.sol\":{\"keccak256\":\"0x3b0ed31deeba7e3c6cfbbe8092a6b427084ee390800a06acdea5c17c8185d606\",\"urls\":[\"bzz-raw://bbdbf9d3754fcdcc85aec0432fabcec914317b1c2081b43753442ed53853a34a\",\"dweb:/ipfs/QmVHWQBn5xQkQEHhyGNEeS5gjjALZEk5ZfcjFt7kL6MoLy\"]},\"openzeppelin-solidity/contracts/math/SafeMath.sol\":{\"keccak256\":\"0x965012d27b4262d7a41f5028cbb30c51ebd9ecd4be8fb30380aaa7a3c64fbc8b\",\"urls\":[\"bzz-raw://1eb493553b27efd46c231a836a83ce50d215639feb97b4aac9f301d0fd034ff5\",\"dweb:/ipfs/QmbMdvSXcqGKxeeYvzF3VrWpoHQyVzMXBhzhAokF2Gdymv\"]},\"openzeppelin-solidity/contracts/ownership/Ownable.sol\":{\"keccak256\":\"0x980de387a1a020a498f53d00f89fecebb12c949a17e8f160093c0303ede2b786\",\"urls\":[\"bzz-raw://f07a2c393caa85f62f0aaa461e3edd50aa59371d4209778ba0558d7f8b4b856c\",\"dweb:/ipfs/QmeN3ZiYGSjCnQFeYaJNgoXjF9eDue1g3e9pqManRkeBtV\"]},\"openzeppelin-solidity/contracts/token/ERC20/ERC20.sol\":{\"keccak256\":\"0xba431353cb4fe70777ac026231eb5468e41aa1e81240a2b8136917acc5fff4dc\",\"urls\":[\"bzz-raw://f40c91ca270bdc9b156f339081a0fc2bbcf73cf5f62b8c73ba555df753ff6619\",\"dweb:/ipfs/QmT8y2VVjGaFdGphpcXrgvdPi2EgF9LuCDgJiJ89LvpFRV\"]},\"openzeppelin-solidity/contracts/token/ERC20/ERC20Burnable.sol\":{\"keccak256\":\"0xa3e68fd7f987c8fbdaf4867d428a69a15f3cf2f69709a5b0a0fbef750b0e6fbc\",\"urls\":[\"bzz-raw://50b1ff986d3b2793850a66c8429d9886fdfb134b1509b3e98714e3e2a71e24f5\",\"dweb:/ipfs/QmSQBYPeY9tbR3ciGRNQqvcWKnNiuxtVMq2MsPWpLwuGGm\"]},\"openzeppelin-solidity/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x079c4e23ee448f529e43bfa3c4e8fb4be52cd0318ee923a276835bedf45b93d8\",\"urls\":[\"bzz-raw://ee762ff5b7746e41d27dcbcea00c7a3034b58adb1b45ddadddb5b721aff450df\",\"dweb:/ipfs/QmdxqtgEFZjHCoiYyz6pUAQ5iBm7As25jcyEbZoTaAgyDa\"]},\"openzeppelin-solidity/contracts/utils/Address.sol\":{\"keccak256\":\"0x5c731061b804fa256fc8c05150eafe5d20b6bb94541a8f187912bf84f7033f34\",\"urls\":[\"bzz-raw://a3c2d9f046beebab7fb41b1b124a6a124a36f510f7c67365861402ac831bdc71\",\"dweb:/ipfs/QmUtASRgitregbKH83anopLtF9vFQe3BKeAjhUa6F7t9YV\"]}},\"version\":1}",
  "bytecode": "0x6080604052600380546001600160a01b031916905560006009819055600a55600e600b553480156200003057600080fd5b50600080546001600160a01b03191633178082556040516001600160a01b03919091169082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a36200008f336001600160e01b036200017916565b600280546001600160a01b0319166001600160a01b03838116919091179182905516156200015457600260009054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156200010657600080fd5b505afa1580156200011b573d6000803e3d6000fd5b505050506040513d60208110156200013257600080fd5b5051600380546001600160a01b0319166001600160a01b039092169190911790555b5062000169336001600160e01b03620001cb16565b6005805460ff19169055620002ac565b620001948160016200021d60201b620014d31790919060201c565b6040516001600160a01b038216907f3505858ac30c166c603cb64de4a970615e36a4ed8fea37ba93bc5f11a38dd30990600090a250565b620001e68160046200021d60201b620014d31790919060201c565b6040516001600160a01b038216907f6719d08c1888103bea251a4ed56406bd0c3e69723c8a1686e017e7bbe159b6f890600090a250565b6001600160a01b0381166200023157600080fd5b6200024682826001600160e01b036200027616565b156200025157600080fd5b6001600160a01b0316600090815260209190915260409020805460ff19166001179055565b60006001600160a01b0382166200028c57600080fd5b506001600160a01b03166000908152602091909152604090205460ff1690565b611a7780620002bc6000396000f3fe608060405234801561001057600080fd5b50600436106102325760003560e01c80636ef8d66d11610130578063c3c5a547116100b8578063e5ecaf591161007c578063e5ecaf59146106d7578063f2fde38b146106fd578063f7d7f9cc14610723578063fe575a8714610749578063fff930d41461076f57610232565b8063c3c5a54714610637578063c6a276c21461065d578063c73cc4ae14610683578063d6cd9473146106a9578063e1e360ba146106b157610232565b80638da5cb5b116100ff5780638da5cb5b146105f15780638f32d59b146105f9578063b2a1de2214610601578063b30f7e7f14610609578063c375c2ef1461061157610232565b80636ef8d66d146105b3578063715018a6146105bb57806382dc1ec4146105c35780638456cb59146105e957610232565b80632bc298ac116101be57806346fbf68e1161018257806346fbf68e1461048b57806354f9f7a3146104b15780635c975abb1461054c5780635f539d691461055457806367c759371461057a57610232565b80632bc298ac146103f75780632ef1afc91461042f57806331b376e2146104555780633af32abf1461045d5780633f4ba83a1461048357610232565b8063188efc1611610205578063188efc16146102b35780631b027099146102d9578063223668441461038f578063291d9549146103ab5780632b32e46c146103d157610232565b8063086cfca81461023757806308e0d29d1461025f5780630f10a8b81461028557806310154bad1461028d575b600080fd5b61025d6004803603602081101561024d57600080fd5b50356001600160a01b031661078c565b005b61025d6004803603602081101561027557600080fd5b50356001600160a01b0316610847565b61025d610908565b61025d600480360360208110156102a357600080fd5b50356001600160a01b0316610913565b61025d600480360360208110156102c957600080fd5b50356001600160a01b03166109c4565b61025d600480360360408110156102ef57600080fd5b6001600160a01b03823516919081019060408101602082013564010000000081111561031a57600080fd5b82018360208201111561032c57600080fd5b8035906020019184600183028401116401000000008311171561034e57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610ab1945050505050565b610397610b64565b604080519115158252519081900360200190f35b61025d600480360360208110156103c157600080fd5b50356001600160a01b0316610b75565b610397600480360360208110156103e757600080fd5b50356001600160a01b0316610c23565b61041d6004803603602081101561040d57600080fd5b50356001600160a01b0316610c48565b60408051918252519081900360200190f35b61041d6004803603602081101561044557600080fd5b50356001600160a01b0316610c5a565b61041d610c6c565b6103976004803603602081101561047357600080fd5b50356001600160a01b0316610c72565b61025d610cd2565b610397600480360360208110156104a157600080fd5b50356001600160a01b0316610d32565b6104d7600480360360208110156104c757600080fd5b50356001600160a01b0316610d4b565b6040805160208082528351818301528351919283929083019185019080838360005b838110156105115781810151838201526020016104f9565b50505050905090810190601f16801561053e5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610397610de6565b61025d6004803603602081101561056a57600080fd5b50356001600160a01b0316610def565b6105976004803603602081101561059057600080fd5b5035610f3f565b604080516001600160a01b039092168252519081900360200190f35b61025d610f5a565b61025d610f63565b61025d600480360360208110156105d957600080fd5b50356001600160a01b0316610fbe565b61025d610fd9565b61059761103d565b61039761104c565b61041d61105d565b61041d611063565b61025d6004803603602081101561062757600080fd5b50356001600160a01b0316611069565b6103976004803603602081101561064d57600080fd5b50356001600160a01b031661115f565b61025d6004803603602081101561067357600080fd5b50356001600160a01b0316611243565b6103976004803603602081101561069957600080fd5b50356001600160a01b0316611330565b61025d611343565b61041d600480360360208110156106c757600080fd5b50356001600160a01b031661135c565b610397600480360360208110156106ed57600080fd5b50356001600160a01b0316611377565b61025d6004803603602081101561071357600080fd5b50356001600160a01b031661138a565b6103976004803603602081101561073957600080fd5b50356001600160a01b03166113a4565b6103976004803603602081101561075f57600080fd5b50356001600160a01b03166113c0565b61025d6004803603602081101561078557600080fd5b50356113d3565b61079461104c565b61079d57600080fd5b600280546001600160a01b0319166001600160a01b03838116919091179182905560408051638da5cb5b60e01b815290519290911691638da5cb5b91600480820192602092909190829003018186803b1580156107f957600080fd5b505afa15801561080d573d6000803e3d6000fd5b505050506040513d602081101561082357600080fd5b5051600380546001600160a01b0319166001600160a01b0390921691909117905550565b61084f610b64565b61088e576040805162461bcd60e51b81526020600482015260186024820152600080516020611a23833981519152604482015290519081900360640190fd5b61089733611377565b6108dc576040805162461bcd60e51b81526020600482015260116024820152703737ba1024b232b73a34ba3ca0b236b4b760791b604482015290519081900360640190fd5b60055460ff16156108ec57600080fd5b6001600160a01b03166000908152600c60205260409020429055565b610911336113f9565b565b61091b610b64565b61095a576040805162461bcd60e51b81526020600482015260186024820152600080516020611a23833981519152604482015290519081900360640190fd5b61096333611377565b6109a8576040805162461bcd60e51b81526020600482015260116024820152703737ba1024b232b73a34ba3ca0b236b4b760791b604482015290519081900360640190fd5b60055460ff16156109b857600080fd5b6109c181611441565b50565b6109cc610b64565b610a0b576040805162461bcd60e51b81526020600482015260186024820152600080516020611a23833981519152604482015290519081900360640190fd5b610a1433611377565b610a59576040805162461bcd60e51b81526020600482015260116024820152703737ba1024b232b73a34ba3ca0b236b4b760791b604482015290519081900360640190fd5b60055460ff1615610a6957600080fd5b610a7a60068263ffffffff6114d316565b6040516001600160a01b038216907f44d5fe68b00f68950fb9c1ff0a61ef7f747b1a36359a7e3a7f3324db4b87896790600090a250565b610ab9610b64565b610af8576040805162461bcd60e51b81526020600482015260186024820152600080516020611a23833981519152604482015290519081900360640190fd5b610b0133611377565b610b46576040805162461bcd60e51b81526020600482015260116024820152703737ba1024b232b73a34ba3ca0b236b4b760791b604482015290519081900360640190fd5b60055460ff1615610b5657600080fd5b610b60828261151f565b5050565b6000610b6f3061115f565b90505b90565b610b7d610b64565b610bbc576040805162461bcd60e51b81526020600482015260186024820152600080516020611a23833981519152604482015290519081900360640190fd5b610bc533611377565b610c0a576040805162461bcd60e51b81526020600482015260116024820152703737ba1024b232b73a34ba3ca0b236b4b760791b604482015290519081900360640190fd5b60055460ff1615610c1a57600080fd5b6109c1816115ed565b6000610c2d61104c565b610c3657600080fd5b610c3f8261176c565b5060015b919050565b600d6020526000908152604090205481565b600c6020526000908152604090205481565b600b5481565b6001600160a01b0381166000908152600c602052604081205481906201518090610ca390429063ffffffff6117b416565b81610caa57fe5b049050600b548111158015610ccb5750610ccb60078463ffffffff6117c916565b9392505050565b610cdb33610d32565b610ce457600080fd5b60055460ff16610cf357600080fd5b6005805460ff191690556040805133815290517f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa9181900360200190a1565b6000610d4560048363ffffffff6117c916565b92915050565b600e6020908152600091825260409182902080548351601f600260001961010060018616150201909316929092049182018490048402810184019094528084529091830182828015610dde5780601f10610db357610100808354040283529160200191610dde565b820191906000526020600020905b815481529060010190602001808311610dc157829003601f168201915b505050505081565b60055460ff1690565b610df7610b64565b610e36576040805162461bcd60e51b81526020600482015260186024820152600080516020611a23833981519152604482015290519081900360640190fd5b610e3f33611377565b610e84576040805162461bcd60e51b81526020600482015260116024820152703737ba1024b232b73a34ba3ca0b236b4b760791b604482015290519081900360640190fd5b60055460ff1615610e9457600080fd5b610e9d816117fe565b610eee576040805162461bcd60e51b815260206004820152601f60248201527f476976656e2061646472657373206973206e6f74206120636f6e747261637400604482015290519081900360640190fd5b610eff60088263ffffffff6114d316565b610f0881611441565b6040516001600160a01b038216907f89c66952b48f3e96bf1d8ba1b63189520fd988a6979b8b740bd5c5d8dc53e20590600090a250565b600f602052600090815260409020546001600160a01b031681565b61091133611804565b610f6b61104c565b610f7457600080fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b610fc733610d32565b610fd057600080fd5b6109c18161184c565b610fe233610d32565b610feb57600080fd5b60055460ff1615610ffb57600080fd5b6005805460ff191660011790556040805133815290517f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2589181900360200190a1565b6000546001600160a01b031690565b6000546001600160a01b0316331490565b60095481565b600a5481565b611071610b64565b6110b0576040805162461bcd60e51b81526020600482015260186024820152600080516020611a23833981519152604482015290519081900360640190fd5b6110b933611377565b6110fe576040805162461bcd60e51b81526020600482015260116024820152703737ba1024b232b73a34ba3ca0b236b4b760791b604482015290519081900360640190fd5b60055460ff161561110e57600080fd5b61111f60088263ffffffff61189416565b611128816115ed565b6040516001600160a01b038216907f8d30d41865a0b811b9545d879520d2dde9f4cc49e4241f486ad9752bc904b56590600090a250565b6002546000906001600160a01b03166111b3576040805162461bcd60e51b8152602060048201526011602482015270105d985d185c881a5cc81b9bdd081cd95d607a1b604482015290519081900360640190fd5b60035460025460408051639be2faed60e01b81526001600160a01b038681166004830152928316602482015290519190921691639be2faed916044808301926020929190829003018186803b15801561120b57600080fd5b505afa15801561121f573d6000803e3d6000fd5b505050506040513d602081101561123557600080fd5b5051610c3f57506000610c43565b61124b610b64565b61128a576040805162461bcd60e51b81526020600482015260186024820152600080516020611a23833981519152604482015290519081900360640190fd5b61129333611377565b6112d8576040805162461bcd60e51b81526020600482015260116024820152703737ba1024b232b73a34ba3ca0b236b4b760791b604482015290519081900360640190fd5b60055460ff16156112e857600080fd5b6112f960068263ffffffff61189416565b6040516001600160a01b038216907f1747ca720b1a174a464b6513ace29b1d3190b5f632b9f34147017c81425bfde890600090a250565b6000610d4560088363ffffffff6117c916565b60055460ff161561135357600080fd5b610911336115ed565b6001600160a01b03166000908152600c602052604090205490565b6000610d4560018363ffffffff6117c916565b61139261104c565b61139b57600080fd5b6109c1816118dc565b60006113ae61104c565b6113b757600080fd5b610c3f826113f9565b6000610d4560068363ffffffff6117c916565b6113db61104c565b6113e457600080fd5b60055460ff16156113f457600080fd5b600b55565b61140a60018263ffffffff61189416565b6040516001600160a01b038216907f869f6a5b4767d57c58d57f1ddf82e1516487f35944a19bf30a4a21bd35f6ad0590600090a250565b61145260078263ffffffff6114d316565b6009805460010190556001600160a01b0381166000908152600d602090815260408083204290819055600c9092529091205561148d816117fe565b1561149c57600a805460010190555b6040516001600160a01b038216907fee1504a83b6d4a361f4c1dc78ab59bfa30d6a3b6612c403e86bb01ef2984295f90600090a250565b6001600160a01b0381166114e657600080fd5b6114f082826117c9565b156114fa57600080fd5b6001600160a01b0316600090815260209190915260409020805460ff19166001179055565b80516020808301919091206000818152600f9092526040909120546001600160a01b03161561158e576040805162461bcd60e51b815260206004820152601660248201527511125108185b1c9958591e481c9959da5cdd195c995960521b604482015290519081900360640190fd5b6001600160a01b0383166000908152600e6020908152604090912083516115b79285019061194a565b506000818152600f6020526040902080546001600160a01b0319166001600160a01b0385161790556115e883611441565b505050565b6115fe60078263ffffffff61189416565b600980546000190190556001600160a01b0381166000908152600c602052604081205561162a816117fe565b1561163a57600a80546000190190555b6001600160a01b0381166000908152600e602090815260409182902080548351601f60026000196101006001861615020190931692909204918201849004840281018401909452808452606093928301828280156116d95780601f106116ae576101008083540402835291602001916116d9565b820191906000526020600020905b8154815290600101906020018083116116bc57829003601f168201915b505083516020808601919091206001600160a01b0388166000908152600c83526040808220829055600e9093529182209596509461171b9450925090506119c8565b6000818152600f602052604080822080546001600160a01b0319169055516001600160a01b038516917f270d9b30cf5b0793bbfd54c9d5b94aeb49462b8148399000265144a8722da6b691a2505050565b61177d60018263ffffffff6114d316565b6040516001600160a01b038216907f3505858ac30c166c603cb64de4a970615e36a4ed8fea37ba93bc5f11a38dd30990600090a250565b6000828211156117c357600080fd5b50900390565b60006001600160a01b0382166117de57600080fd5b506001600160a01b03166000908152602091909152604090205460ff1690565b3b151590565b61181560048263ffffffff61189416565b6040516001600160a01b038216907fcd265ebaf09df2871cc7bd4133404a235ba12eff2041bb89d9c714a2621c7c7e90600090a250565b61185d60048263ffffffff6114d316565b6040516001600160a01b038216907f6719d08c1888103bea251a4ed56406bd0c3e69723c8a1686e017e7bbe159b6f890600090a250565b6001600160a01b0381166118a757600080fd5b6118b182826117c9565b6118ba57600080fd5b6001600160a01b0316600090815260209190915260409020805460ff19169055565b6001600160a01b0381166118ef57600080fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061198b57805160ff19168380011785556119b8565b828001600101855582156119b8579182015b828111156119b857825182559160200191906001019061199d565b506119c4929150611a08565b5090565b50805460018160011615610100020316600290046000825580601f106119ee57506109c1565b601f0160209004906000526020600020908101906109c191905b610b7291905b808211156119c45760008155600101611a0e56fe536368656d65206973206e6f7420726567697374657265640000000000000000a265627a7a72315820b9ee462a304f3e230d9f0f2ef9572afa917d30c3fc673b5b3dfcec4898572fd064736f6c63430005100032",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106102325760003560e01c80636ef8d66d11610130578063c3c5a547116100b8578063e5ecaf591161007c578063e5ecaf59146106d7578063f2fde38b146106fd578063f7d7f9cc14610723578063fe575a8714610749578063fff930d41461076f57610232565b8063c3c5a54714610637578063c6a276c21461065d578063c73cc4ae14610683578063d6cd9473146106a9578063e1e360ba146106b157610232565b80638da5cb5b116100ff5780638da5cb5b146105f15780638f32d59b146105f9578063b2a1de2214610601578063b30f7e7f14610609578063c375c2ef1461061157610232565b80636ef8d66d146105b3578063715018a6146105bb57806382dc1ec4146105c35780638456cb59146105e957610232565b80632bc298ac116101be57806346fbf68e1161018257806346fbf68e1461048b57806354f9f7a3146104b15780635c975abb1461054c5780635f539d691461055457806367c759371461057a57610232565b80632bc298ac146103f75780632ef1afc91461042f57806331b376e2146104555780633af32abf1461045d5780633f4ba83a1461048357610232565b8063188efc1611610205578063188efc16146102b35780631b027099146102d9578063223668441461038f578063291d9549146103ab5780632b32e46c146103d157610232565b8063086cfca81461023757806308e0d29d1461025f5780630f10a8b81461028557806310154bad1461028d575b600080fd5b61025d6004803603602081101561024d57600080fd5b50356001600160a01b031661078c565b005b61025d6004803603602081101561027557600080fd5b50356001600160a01b0316610847565b61025d610908565b61025d600480360360208110156102a357600080fd5b50356001600160a01b0316610913565b61025d600480360360208110156102c957600080fd5b50356001600160a01b03166109c4565b61025d600480360360408110156102ef57600080fd5b6001600160a01b03823516919081019060408101602082013564010000000081111561031a57600080fd5b82018360208201111561032c57600080fd5b8035906020019184600183028401116401000000008311171561034e57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610ab1945050505050565b610397610b64565b604080519115158252519081900360200190f35b61025d600480360360208110156103c157600080fd5b50356001600160a01b0316610b75565b610397600480360360208110156103e757600080fd5b50356001600160a01b0316610c23565b61041d6004803603602081101561040d57600080fd5b50356001600160a01b0316610c48565b60408051918252519081900360200190f35b61041d6004803603602081101561044557600080fd5b50356001600160a01b0316610c5a565b61041d610c6c565b6103976004803603602081101561047357600080fd5b50356001600160a01b0316610c72565b61025d610cd2565b610397600480360360208110156104a157600080fd5b50356001600160a01b0316610d32565b6104d7600480360360208110156104c757600080fd5b50356001600160a01b0316610d4b565b6040805160208082528351818301528351919283929083019185019080838360005b838110156105115781810151838201526020016104f9565b50505050905090810190601f16801561053e5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610397610de6565b61025d6004803603602081101561056a57600080fd5b50356001600160a01b0316610def565b6105976004803603602081101561059057600080fd5b5035610f3f565b604080516001600160a01b039092168252519081900360200190f35b61025d610f5a565b61025d610f63565b61025d600480360360208110156105d957600080fd5b50356001600160a01b0316610fbe565b61025d610fd9565b61059761103d565b61039761104c565b61041d61105d565b61041d611063565b61025d6004803603602081101561062757600080fd5b50356001600160a01b0316611069565b6103976004803603602081101561064d57600080fd5b50356001600160a01b031661115f565b61025d6004803603602081101561067357600080fd5b50356001600160a01b0316611243565b6103976004803603602081101561069957600080fd5b50356001600160a01b0316611330565b61025d611343565b61041d600480360360208110156106c757600080fd5b50356001600160a01b031661135c565b610397600480360360208110156106ed57600080fd5b50356001600160a01b0316611377565b61025d6004803603602081101561071357600080fd5b50356001600160a01b031661138a565b6103976004803603602081101561073957600080fd5b50356001600160a01b03166113a4565b6103976004803603602081101561075f57600080fd5b50356001600160a01b03166113c0565b61025d6004803603602081101561078557600080fd5b50356113d3565b61079461104c565b61079d57600080fd5b600280546001600160a01b0319166001600160a01b03838116919091179182905560408051638da5cb5b60e01b815290519290911691638da5cb5b91600480820192602092909190829003018186803b1580156107f957600080fd5b505afa15801561080d573d6000803e3d6000fd5b505050506040513d602081101561082357600080fd5b5051600380546001600160a01b0319166001600160a01b0390921691909117905550565b61084f610b64565b61088e576040805162461bcd60e51b81526020600482015260186024820152600080516020611a23833981519152604482015290519081900360640190fd5b61089733611377565b6108dc576040805162461bcd60e51b81526020600482015260116024820152703737ba1024b232b73a34ba3ca0b236b4b760791b604482015290519081900360640190fd5b60055460ff16156108ec57600080fd5b6001600160a01b03166000908152600c60205260409020429055565b610911336113f9565b565b61091b610b64565b61095a576040805162461bcd60e51b81526020600482015260186024820152600080516020611a23833981519152604482015290519081900360640190fd5b61096333611377565b6109a8576040805162461bcd60e51b81526020600482015260116024820152703737ba1024b232b73a34ba3ca0b236b4b760791b604482015290519081900360640190fd5b60055460ff16156109b857600080fd5b6109c181611441565b50565b6109cc610b64565b610a0b576040805162461bcd60e51b81526020600482015260186024820152600080516020611a23833981519152604482015290519081900360640190fd5b610a1433611377565b610a59576040805162461bcd60e51b81526020600482015260116024820152703737ba1024b232b73a34ba3ca0b236b4b760791b604482015290519081900360640190fd5b60055460ff1615610a6957600080fd5b610a7a60068263ffffffff6114d316565b6040516001600160a01b038216907f44d5fe68b00f68950fb9c1ff0a61ef7f747b1a36359a7e3a7f3324db4b87896790600090a250565b610ab9610b64565b610af8576040805162461bcd60e51b81526020600482015260186024820152600080516020611a23833981519152604482015290519081900360640190fd5b610b0133611377565b610b46576040805162461bcd60e51b81526020600482015260116024820152703737ba1024b232b73a34ba3ca0b236b4b760791b604482015290519081900360640190fd5b60055460ff1615610b5657600080fd5b610b60828261151f565b5050565b6000610b6f3061115f565b90505b90565b610b7d610b64565b610bbc576040805162461bcd60e51b81526020600482015260186024820152600080516020611a23833981519152604482015290519081900360640190fd5b610bc533611377565b610c0a576040805162461bcd60e51b81526020600482015260116024820152703737ba1024b232b73a34ba3ca0b236b4b760791b604482015290519081900360640190fd5b60055460ff1615610c1a57600080fd5b6109c1816115ed565b6000610c2d61104c565b610c3657600080fd5b610c3f8261176c565b5060015b919050565b600d6020526000908152604090205481565b600c6020526000908152604090205481565b600b5481565b6001600160a01b0381166000908152600c602052604081205481906201518090610ca390429063ffffffff6117b416565b81610caa57fe5b049050600b548111158015610ccb5750610ccb60078463ffffffff6117c916565b9392505050565b610cdb33610d32565b610ce457600080fd5b60055460ff16610cf357600080fd5b6005805460ff191690556040805133815290517f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa9181900360200190a1565b6000610d4560048363ffffffff6117c916565b92915050565b600e6020908152600091825260409182902080548351601f600260001961010060018616150201909316929092049182018490048402810184019094528084529091830182828015610dde5780601f10610db357610100808354040283529160200191610dde565b820191906000526020600020905b815481529060010190602001808311610dc157829003601f168201915b505050505081565b60055460ff1690565b610df7610b64565b610e36576040805162461bcd60e51b81526020600482015260186024820152600080516020611a23833981519152604482015290519081900360640190fd5b610e3f33611377565b610e84576040805162461bcd60e51b81526020600482015260116024820152703737ba1024b232b73a34ba3ca0b236b4b760791b604482015290519081900360640190fd5b60055460ff1615610e9457600080fd5b610e9d816117fe565b610eee576040805162461bcd60e51b815260206004820152601f60248201527f476976656e2061646472657373206973206e6f74206120636f6e747261637400604482015290519081900360640190fd5b610eff60088263ffffffff6114d316565b610f0881611441565b6040516001600160a01b038216907f89c66952b48f3e96bf1d8ba1b63189520fd988a6979b8b740bd5c5d8dc53e20590600090a250565b600f602052600090815260409020546001600160a01b031681565b61091133611804565b610f6b61104c565b610f7457600080fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b610fc733610d32565b610fd057600080fd5b6109c18161184c565b610fe233610d32565b610feb57600080fd5b60055460ff1615610ffb57600080fd5b6005805460ff191660011790556040805133815290517f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2589181900360200190a1565b6000546001600160a01b031690565b6000546001600160a01b0316331490565b60095481565b600a5481565b611071610b64565b6110b0576040805162461bcd60e51b81526020600482015260186024820152600080516020611a23833981519152604482015290519081900360640190fd5b6110b933611377565b6110fe576040805162461bcd60e51b81526020600482015260116024820152703737ba1024b232b73a34ba3ca0b236b4b760791b604482015290519081900360640190fd5b60055460ff161561110e57600080fd5b61111f60088263ffffffff61189416565b611128816115ed565b6040516001600160a01b038216907f8d30d41865a0b811b9545d879520d2dde9f4cc49e4241f486ad9752bc904b56590600090a250565b6002546000906001600160a01b03166111b3576040805162461bcd60e51b8152602060048201526011602482015270105d985d185c881a5cc81b9bdd081cd95d607a1b604482015290519081900360640190fd5b60035460025460408051639be2faed60e01b81526001600160a01b038681166004830152928316602482015290519190921691639be2faed916044808301926020929190829003018186803b15801561120b57600080fd5b505afa15801561121f573d6000803e3d6000fd5b505050506040513d602081101561123557600080fd5b5051610c3f57506000610c43565b61124b610b64565b61128a576040805162461bcd60e51b81526020600482015260186024820152600080516020611a23833981519152604482015290519081900360640190fd5b61129333611377565b6112d8576040805162461bcd60e51b81526020600482015260116024820152703737ba1024b232b73a34ba3ca0b236b4b760791b604482015290519081900360640190fd5b60055460ff16156112e857600080fd5b6112f960068263ffffffff61189416565b6040516001600160a01b038216907f1747ca720b1a174a464b6513ace29b1d3190b5f632b9f34147017c81425bfde890600090a250565b6000610d4560088363ffffffff6117c916565b60055460ff161561135357600080fd5b610911336115ed565b6001600160a01b03166000908152600c602052604090205490565b6000610d4560018363ffffffff6117c916565b61139261104c565b61139b57600080fd5b6109c1816118dc565b60006113ae61104c565b6113b757600080fd5b610c3f826113f9565b6000610d4560068363ffffffff6117c916565b6113db61104c565b6113e457600080fd5b60055460ff16156113f457600080fd5b600b55565b61140a60018263ffffffff61189416565b6040516001600160a01b038216907f869f6a5b4767d57c58d57f1ddf82e1516487f35944a19bf30a4a21bd35f6ad0590600090a250565b61145260078263ffffffff6114d316565b6009805460010190556001600160a01b0381166000908152600d602090815260408083204290819055600c9092529091205561148d816117fe565b1561149c57600a805460010190555b6040516001600160a01b038216907fee1504a83b6d4a361f4c1dc78ab59bfa30d6a3b6612c403e86bb01ef2984295f90600090a250565b6001600160a01b0381166114e657600080fd5b6114f082826117c9565b156114fa57600080fd5b6001600160a01b0316600090815260209190915260409020805460ff19166001179055565b80516020808301919091206000818152600f9092526040909120546001600160a01b03161561158e576040805162461bcd60e51b815260206004820152601660248201527511125108185b1c9958591e481c9959da5cdd195c995960521b604482015290519081900360640190fd5b6001600160a01b0383166000908152600e6020908152604090912083516115b79285019061194a565b506000818152600f6020526040902080546001600160a01b0319166001600160a01b0385161790556115e883611441565b505050565b6115fe60078263ffffffff61189416565b600980546000190190556001600160a01b0381166000908152600c602052604081205561162a816117fe565b1561163a57600a80546000190190555b6001600160a01b0381166000908152600e602090815260409182902080548351601f60026000196101006001861615020190931692909204918201849004840281018401909452808452606093928301828280156116d95780601f106116ae576101008083540402835291602001916116d9565b820191906000526020600020905b8154815290600101906020018083116116bc57829003601f168201915b505083516020808601919091206001600160a01b0388166000908152600c83526040808220829055600e9093529182209596509461171b9450925090506119c8565b6000818152600f602052604080822080546001600160a01b0319169055516001600160a01b038516917f270d9b30cf5b0793bbfd54c9d5b94aeb49462b8148399000265144a8722da6b691a2505050565b61177d60018263ffffffff6114d316565b6040516001600160a01b038216907f3505858ac30c166c603cb64de4a970615e36a4ed8fea37ba93bc5f11a38dd30990600090a250565b6000828211156117c357600080fd5b50900390565b60006001600160a01b0382166117de57600080fd5b506001600160a01b03166000908152602091909152604090205460ff1690565b3b151590565b61181560048263ffffffff61189416565b6040516001600160a01b038216907fcd265ebaf09df2871cc7bd4133404a235ba12eff2041bb89d9c714a2621c7c7e90600090a250565b61185d60048263ffffffff6114d316565b6040516001600160a01b038216907f6719d08c1888103bea251a4ed56406bd0c3e69723c8a1686e017e7bbe159b6f890600090a250565b6001600160a01b0381166118a757600080fd5b6118b182826117c9565b6118ba57600080fd5b6001600160a01b0316600090815260209190915260409020805460ff19169055565b6001600160a01b0381166118ef57600080fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061198b57805160ff19168380011785556119b8565b828001600101855582156119b8579182015b828111156119b857825182559160200191906001019061199d565b506119c4929150611a08565b5090565b50805460018160011615610100020316600290046000825580601f106119ee57506109c1565b601f0160209004906000526020600020908101906109c191905b610b7291905b808211156119c45760008155600101611a0e56fe536368656d65206973206e6f7420726567697374657265640000000000000000a265627a7a72315820b9ee462a304f3e230d9f0f2ef9572afa917d30c3fc673b5b3dfcec4898572fd064736f6c63430005100032",
  "sourceMap": "456:8778:9:-;;;443:64:7;;;-1:-1:-1;;;;;;443:64:7;;;505:1;692:35:9;;;;733:39;;816:2;778:40;;1358:46;5:2:-1;;;;30:1;27;20:12;5:2;-1:-1;1398:1:9;515:19:77;;-1:-1:-1;;;;;;515:19:77;524:10;515:19;;;;549:40;;-1:-1:-1;;;;;582:6:77;;;;;1398:1:9;;549:40:77;;1398:1:9;;549:40:77;548:29:10;566:10;-1:-1:-1;;;;;548:17:10;:29;:::i;:::-;688:6:7;:16;;-1:-1:-1;;;;;;688:16:7;-1:-1:-1;;;;;688:16:7;;;;;;;;;;;719:6;:19;715:98;;787:6;;;;;;;;;-1:-1:-1;;;;;787:6:7;-1:-1:-1;;;;;787:12:7;;:14;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;787:14:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;787:14:7;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;787:14:7;754:10;:48;;-1:-1:-1;;;;;;754:48:7;-1:-1:-1;;;;;754:48:7;;;;;;;;;715:98;-1:-1:-1;275:22:72;286:10;-1:-1:-1;;;;;275:10:72;:22;:::i;:::-;352:7:74;:15;;-1:-1:-1;;352:15:74;;;456:8778:9;;1970:142:10;2034:27;2053:7;2034:14;:18;;;;;;:27;;;;:::i;:::-;2077;;-1:-1:-1;;;;;2077:27:10;;;;;;;;1970:142;:::o;685:119:72:-;741:21;754:7;741:8;:12;;;;;;:21;;;;:::i;:::-;777:20;;-1:-1:-1;;;;;777:20:72;;;;;;;;685:119;:::o;259:181:70:-;-1:-1:-1;;;;;335:21:70;;327:30;;;;;;376:18;380:4;386:7;-1:-1:-1;;;;;376:3:70;:18;:::i;:::-;375:19;367:28;;;;;;-1:-1:-1;;;;;406:20:70;:11;:20;;;;;;;;;;;:27;;-1:-1:-1;;406:27:70;429:4;406:27;;;259:181::o;786:162::-;858:4;-1:-1:-1;;;;;882:21:70;;874:30;;;;;;-1:-1:-1;;;;;;921:20:70;:11;:20;;;;;;;;;;;;;;;786:162::o;456:8778:9:-;;;;;;;",
  "deployedSourceMap": "456:8778:9:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;456:8778:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1698:143:7;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1698:143:7;-1:-1:-1;;;;;1698:143:7;;:::i;:::-;;1913:178:9;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1913:178:9;-1:-1:-1;;;;;1913:178:9;;:::i;1796:91:10:-;;;:::i;2255:172:9:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2255:172:9;-1:-1:-1;;;;;2255:172:9;;:::i;5366:208::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5366:208:9;-1:-1:-1;;;;;5366:208:9;;:::i;2591:210::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;2591:210:9;;;;;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;2591:210:9;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;2591:210:9;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;2591:210:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;2591:210:9;;-1:-1:-1;2591:210:9;;-1:-1:-1;;;;;2591:210:9:i;1987:102:7:-;;;:::i;:::-;;;;;;;;;;;;;;;;;;2971:178:9;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2971:178:9;-1:-1:-1;;;;;2971:178:9;;:::i;1248:142:10:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1248:142:10;-1:-1:-1;;;;;1248:142:10;;:::i;883:44:9:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;883:44:9;-1:-1:-1;;;;;883:44:9;;:::i;:::-;;;;;;;;;;;;;;;;825:52;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;825:52:9;-1:-1:-1;;;;;825:52:9;;:::i;778:40::-;;;:::i;3520:268::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3520:268:9;-1:-1:-1;;;;;3520:268:9;;:::i;1176:115:74:-;;;:::i;395:107:72:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;395:107:72;-1:-1:-1;;;;;395:107:72;;:::i;934:43:9:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;934:43:9;-1:-1:-1;;;;;934:43:9;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;934:43:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;460:76:74;;;:::i;6074:312:9:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;6074:312:9;-1:-1:-1;;;;;6074:312:9;;:::i;983:51::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;983:51:9;;:::i;:::-;;;;-1:-1:-1;;;;;983:51:9;;;;;;;;;;;;;;604:75:72;;;:::i;1347:137:77:-;;;:::i;508:90:72:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;508:90:72;-1:-1:-1;;;;;508:90:72;;:::i;973:113:74:-;;;:::i;659:77:77:-;;;:::i;979:90::-;;;:::i;692:35:9:-;;;:::i;733:39::-;;;:::i;6506:250::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;6506:250:9;-1:-1:-1;;;;;6506:250:9;;:::i;2235:262:7:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2235:262:7;-1:-1:-1;;;;;2235:262:7;;:::i;5743:216:9:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5743:216:9;-1:-1:-1;;;;;5743:216:9;;:::i;6942:113::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;6942:113:9;-1:-1:-1;;;;;6942:113:9;;:::i;3217:99::-;;;:::i;3957:124::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3957:124:9;-1:-1:-1;;;;;3957:124:9;;:::i;951:122:10:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;951:122:10;-1:-1:-1;;;;;951:122:10;;:::i;1655:107:77:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1655:107:77;-1:-1:-1;;;;;1655:107:77;;:::i;1570:148:10:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1570:148:10;-1:-1:-1;;;;;1570:148:10;;:::i;8809:113:9:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;8809:113:9;-1:-1:-1;;;;;8809:113:9;;:::i;1583:126::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1583:126:9;;:::i;1698:143:7:-;863:9:77;:7;:9::i;:::-;855:18;;;;;;1760:6:7;:16;;-1:-1:-1;;;;;;1760:16:7;-1:-1:-1;;;;;1760:16:7;;;;;;;;;;;1819:14;;;-1:-1:-1;;;1819:14:7;;;;:6;;;;;:12;;:14;;;;;;;;;;;;;;;:6;:14;;;5:2:-1;;;;30:1;27;20:12;5:2;1819:14:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1819:14:7;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1819:14:7;1786:10;:48;;-1:-1:-1;;;;;;1786:48:7;-1:-1:-1;;;;;1786:48:7;;;;;;;;;-1:-1:-1;1698:143:7:o;1913:178:9:-;1121:14:7;:12;:14::i;:::-;1113:51;;;;;-1:-1:-1;;;1113:51:7;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1113:51:7;;;;;;;;;;;;;;;703:27:10;719:10;703:15;:27::i;:::-;695:57;;;;;-1:-1:-1;;;695:57:10;;;;;;;;;;;;-1:-1:-1;;;695:57:10;;;;;;;;;;;;;;;689:7:74;;;;688:8;680:17;;;;;;-1:-1:-1;;;;;2052:26:9;;;;;:17;:26;;;;;2081:3;2052:32;;1913:178::o;1796:91:10:-;1847:32;1868:10;1847:20;:32::i;:::-;1796:91::o;2255:172:9:-;1121:14:7;:12;:14::i;:::-;1113:51;;;;;-1:-1:-1;;;1113:51:7;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1113:51:7;;;;;;;;;;;;;;;703:27:10;719:10;703:15;:27::i;:::-;695:57;;;;;-1:-1:-1;;;695:57:10;;;;;;;;;;;;-1:-1:-1;;;695:57:10;;;;;;;;;;;;;;;689:7:74;;;;688:8;680:17;;;;;;2396:24:9;2412:7;2396:15;:24::i;:::-;2255:172;:::o;5366:208::-;1121:14:7;:12;:14::i;:::-;1113:51;;;;;-1:-1:-1;;;1113:51:7;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1113:51:7;;;;;;;;;;;;;;;703:27:10;719:10;703:15;:27::i;:::-;695:57;;;;;-1:-1:-1;;;695:57:10;;;;;;;;;;;;-1:-1:-1;;;695:57:10;;;;;;;;;;;;;;;689:7:74;;;;688:8;680:17;;;;;;5507:22:9;:9;5521:7;5507:22;:13;:22;:::i;:::-;5544:23;;-1:-1:-1;;;;;5544:23:9;;;;;;;;5366:208;:::o;2591:210::-;1121:14:7;:12;:14::i;:::-;1113:51;;;;;-1:-1:-1;;;1113:51:7;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1113:51:7;;;;;;;;;;;;;;;703:27:10;719:10;703:15;:27::i;:::-;695:57;;;;;-1:-1:-1;;;695:57:10;;;;;;;;;;;;-1:-1:-1;;;695:57:10;;;;;;;;;;;;;;;689:7:74;;;;688:8;680:17;;;;;;2758:36:9;2781:7;2790:3;2758:22;:36::i;:::-;2591:210;;:::o;1987:102:7:-;2032:4;2055:27;2076:4;2055:12;:27::i;:::-;2048:34;;1987:102;;:::o;2971:178:9:-;1121:14:7;:12;:14::i;:::-;1113:51;;;;;-1:-1:-1;;;1113:51:7;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1113:51:7;;;;;;;;;;;;;;;703:27:10;719:10;703:15;:27::i;:::-;695:57;;;;;-1:-1:-1;;;695:57:10;;;;;;;;;;;;-1:-1:-1;;;695:57:10;;;;;;;;;;;;;;;689:7:74;;;;688:8;680:17;;;;;;3115:27:9;3134:7;3115:18;:27::i;1248:142:10:-;1317:4;863:9:77;:7;:9::i;:::-;855:18;;;;;;1334:26:10;1352:7;1334:17;:26::i;:::-;-1:-1:-1;1378:4:10;883:1:77;1248:142:10;;;:::o;883:44:9:-;;;;;;;;;;;;;:::o;825:52::-;;;;;;;;;;;;;:::o;778:40::-;;;;:::o;3520:268::-;-1:-1:-1;;;;;3640:26:9;;3581:4;3640:26;;;:17;:26;;;;;;3581:4;;3671:6;;3632:35;;:3;;:35;:7;:35;:::i;:::-;3631:46;;;;;;3597:80;;3734:20;;3707:23;:47;;3706:75;;;;-1:-1:-1;3759:22:9;:9;3773:7;3759:22;:13;:22;:::i;:::-;3687:94;3520:268;-1:-1:-1;;;3520:268:9:o;1176:115:74:-;350:20:72;359:10;350:8;:20::i;:::-;342:29;;;;;;860:7:74;;;;852:16;;;;;;1234:7;:15;;-1:-1:-1;;1234:15:74;;;1264:20;;;1273:10;1264:20;;;;;;;;;;;;;1176:115::o;395:107:72:-;451:4;474:21;:8;487:7;474:21;:12;:21;:::i;:::-;467:28;395:107;-1:-1:-1;;395:107:72:o;934:43:9:-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;934:43:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;460:76:74:-;522:7;;;;460:76;:::o;6074:312:9:-;1121:14:7;:12;:14::i;:::-;1113:51;;;;;-1:-1:-1;;;1113:51:7;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1113:51:7;;;;;;;;;;;;;;;703:27:10;719:10;703:15;:27::i;:::-;695:57;;;;;-1:-1:-1;;;695:57:10;;;;;;;;;;;;-1:-1:-1;;;695:57:10;;;;;;;;;;;;;;;689:7:74;;;;688:8;680:17;;;;;;6220:19:9;6231:7;6220:10;:19::i;:::-;6212:63;;;;;-1:-1:-1;;;6212:63:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;6285:22;:9;6299:7;6285:22;:13;:22;:::i;:::-;6317:24;6333:7;6317:15;:24::i;:::-;6357:22;;-1:-1:-1;;;;;6357:22:9;;;;;;;;6074:312;:::o;983:51::-;;;;;;;;;;;;-1:-1:-1;;;;;983:51:9;;:::o;604:75:72:-;647:25;661:10;647:13;:25::i;1347:137:77:-;863:9;:7;:9::i;:::-;855:18;;;;;;1445:1;1429:6;;1408:40;;-1:-1:-1;;;;;1429:6:77;;;;1408:40;;1445:1;;1408:40;1475:1;1458:19;;-1:-1:-1;;;;;;1458:19:77;;;1347:137::o;508:90:72:-;350:20;359:10;350:8;:20::i;:::-;342:29;;;;;;572:19;583:7;572:10;:19::i;973:113:74:-;350:20:72;359:10;350:8;:20::i;:::-;342:29;;;;;;689:7:74;;;;688:8;680:17;;;;;;1032:7;:14;;-1:-1:-1;;1032:14:74;1042:4;1032:14;;;1061:18;;;1068:10;1061:18;;;;;;;;;;;;;973:113::o;659:77:77:-;697:7;723:6;-1:-1:-1;;;;;723:6:77;659:77;:::o;979:90::-;1019:4;1056:6;-1:-1:-1;;;;;1056:6:77;1042:10;:20;;979:90::o;692:35:9:-;;;;:::o;733:39::-;;;;:::o;6506:250::-;1121:14:7;:12;:14::i;:::-;1113:51;;;;;-1:-1:-1;;;1113:51:7;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1113:51:7;;;;;;;;;;;;;;;703:27:10;719:10;703:15;:27::i;:::-;695:57;;;;;-1:-1:-1;;;695:57:10;;;;;;;;;;;;-1:-1:-1;;;695:57:10;;;;;;;;;;;;;;;689:7:74;;;;688:8;680:17;;;;;;6647:25:9;:9;6664:7;6647:25;:16;:25;:::i;:::-;6682:27;6701:7;6682:18;:27::i;:::-;6725:24;;-1:-1:-1;;;;;6725:24:9;;;;;;;;6506:250;:::o;2235:262:7:-;2318:6;;2294:4;;-1:-1:-1;;;;;2318:6:7;2310:49;;;;;-1:-1:-1;;;2310:49:7;;;;;;;;;;;;-1:-1:-1;;;2310:49:7;;;;;;;;;;;;;;;2376:10;;2422:6;;2376:54;;;-1:-1:-1;;;2376:54:7;;-1:-1:-1;;;;;2376:54:7;;;;;;;2422:6;;;2376:54;;;;;;:10;;;;;:29;;:54;;;;;;;;;;;;;;:10;:54;;;5:2:-1;;;;30:1;27;20:12;5:2;2376:54:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2376:54:7;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2376:54:7;2370:100;;-1:-1:-1;2454:5:7;2447:12;;5743:216:9;1121:14:7;:12;:14::i;:::-;1113:51;;;;;-1:-1:-1;;;1113:51:7;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1113:51:7;;;;;;;;;;;;;;;703:27:10;719:10;703:15;:27::i;:::-;695:57;;;;;-1:-1:-1;;;695:57:10;;;;;;;;;;;;-1:-1:-1;;;695:57:10;;;;;;;;;;;;;;;689:7:74;;;;688:8;680:17;;;;;;5887:25:9;:9;5904:7;5887:25;:16;:25;:::i;:::-;5927;;-1:-1:-1;;;;;5927:25:9;;;;;;;;5743:216;:::o;6942:113::-;7003:4;7026:22;:9;7040:7;7026:22;:13;:22;:::i;3217:99::-;689:7:74;;;;688:8;680:17;;;;;;3279:30:9;3298:10;3279:18;:30::i;3957:124::-;-1:-1:-1;;;;;4048:26:9;4022:7;4048:26;;;:17;:26;;;;;;;3957:124::o;951:122:10:-;1014:4;1038:27;:14;1057:7;1038:27;:18;:27;:::i;1655:107:77:-;863:9;:7;:9::i;:::-;855:18;;;;;;1727:28;1746:8;1727:18;:28::i;1570:148:10:-;1642:4;863:9:77;:7;:9::i;:::-;855:18;;;;;;1659:29:10;1680:7;1659:20;:29::i;8809:113:9:-;8870:4;8893:22;:9;8907:7;8893:22;:13;:22;:::i;1583:126::-;863:9:77;:7;:9::i;:::-;855:18;;;;;;689:7:74;;;;688:8;680:17;;;;;;1673:20:9;:29;1583:126::o;2198:150:10:-;2265:30;:14;2287:7;2265:30;:21;:30;:::i;:::-;2311:29;;-1:-1:-1;;;;;2311:29:10;;;;;;;;2198:150;:::o;7162:324:9:-;7223:22;:9;7237:7;7223:22;:13;:22;:::i;:::-;7256:16;:21;;7276:1;7256:21;;;-1:-1:-1;;;;;7287:18:9;;7256:16;7287:18;;;:9;:18;;;;;;;;7308:3;7287:24;;;;7321:17;:26;;;;;;:32;7368:19;7297:7;7368:10;:19::i;:::-;7364:75;;;7403:20;:25;;7427:1;7403:25;;;7364:75;7454:25;;-1:-1:-1;;;;;7454:25:9;;;;;;;;7162:324;:::o;259:181:70:-;-1:-1:-1;;;;;335:21:70;;327:30;;;;;;376:18;380:4;386:7;376:3;:18::i;:::-;375:19;367:28;;;;;;-1:-1:-1;;;;;406:20:70;:11;:20;;;;;;;;;;;:27;;-1:-1:-1;;406:27:70;429:4;406:27;;;259:181::o;7645:326:9:-;7748:21;;;;;;;;;;7732:13;7787:23;;;:16;:23;;;;;;;;-1:-1:-1;;;;;7787:23:9;:37;7779:72;;;;;-1:-1:-1;;;7779:72:9;;;;;;;;;;;;-1:-1:-1;;;7779:72:9;;;;;;;;;;;;;;;-1:-1:-1;;;;;7862:18:9;;;;;;:9;:18;;;;;;;;:24;;;;;;;;:::i;:::-;-1:-1:-1;7896:23:9;;;;:16;:23;;;;;:33;;-1:-1:-1;;;;;;7896:33:9;-1:-1:-1;;;;;7896:33:9;;;;;7940:24;7896:33;7940:15;:24::i;:::-;7645:326;;;:::o;8083:514::-;8147:25;:9;8164:7;8147:25;:16;:25;:::i;:::-;8183:16;:21;;-1:-1:-1;;8183:21:9;;;-1:-1:-1;;;;;8221:26:9;;8183:16;8221:26;;;:17;:26;;;;;8214:33;8262:19;8239:7;8262:10;:19::i;:::-;8258:75;;;8297:20;:25;;-1:-1:-1;;8297:25:9;;;8258:75;-1:-1:-1;;;;;8363:18:9;;;;;;:9;:18;;;;;;;;;8343:38;;;;;;-1:-1:-1;;8343:38:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:17;;:38;;;8363:18;8343:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;8407:21:9;;;;;;;;;;-1:-1:-1;;;;;8446:26:9;;8391:13;8446:26;;;:17;:26;;;;;;8439:33;;;8489:9;:18;;;;;;8343:38;;-1:-1:-1;8407:21:9;8482:25;;-1:-1:-1;8489:18:9;-1:-1:-1;8391:13:9;-1:-1:-1;8482:25:9;:::i;:::-;8524:23;;;;:16;:23;;;;;;8517:30;;-1:-1:-1;;;;;;8517:30:9;;;8563:27;-1:-1:-1;;;;;8563:27:9;;;;;;8083:514;;;:::o;1970:142:10:-;2034:27;:14;2053:7;2034:27;:18;:27;:::i;:::-;2077;;-1:-1:-1;;;;;2077:27:10;;;;;;;;1970:142;:::o;1205:145:76:-;1263:7;1295:1;1290;:6;;1282:15;;;;;;-1:-1:-1;1319:5:76;;;1205:145::o;786:162:70:-;858:4;-1:-1:-1;;;;;882:21:70;;874:30;;;;;;-1:-1:-1;;;;;;921:20:70;:11;:20;;;;;;;;;;;;;;;786:162::o;9040:192:9:-;9171:18;9215:10;;;9040:192::o;810:127:72:-;869:24;:8;885:7;869:24;:15;:24;:::i;:::-;908:22;;-1:-1:-1;;;;;908:22:72;;;;;;;;810:127;:::o;685:119::-;741:21;:8;754:7;741:21;:12;:21;:::i;:::-;777:20;;-1:-1:-1;;;;;777:20:72;;;;;;;;685:119;:::o;514:184:70:-;-1:-1:-1;;;;;593:21:70;;585:30;;;;;;633:18;637:4;643:7;633:3;:18::i;:::-;625:27;;;;;;-1:-1:-1;;;;;663:20:70;686:5;663:20;;;;;;;;;;;:28;;-1:-1:-1;;663:28:70;;;514:184::o;1906:183:77:-;-1:-1:-1;;;;;1979:22:77;;1971:31;;;;;;2038:6;;;2017:38;;-1:-1:-1;;;;;2017:38:77;;;;2038:6;;;2017:38;;;2065:6;:17;;-1:-1:-1;;;;;;2065:17:77;-1:-1:-1;;;;;2065:17:77;;;;;;;;;;1906:183::o;456:8778:9:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;456:8778:9;;;-1:-1:-1;456:8778:9;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;",
  "source": "pragma solidity >0.5.4;\n\nimport \"openzeppelin-solidity/contracts/access/Roles.sol\";\nimport \"openzeppelin-solidity/contracts/math/SafeMath.sol\";\nimport \"openzeppelin-solidity/contracts/lifecycle/Pausable.sol\";\n\nimport \"@daostack/arc/contracts/controller/Avatar.sol\";\n\nimport \"../dao/schemes/SchemeGuard.sol\";\nimport \"./IdentityAdminRole.sol\";\n\n/* @title Identity contract responsible for whitelisting\n * and keeping track of amount of whitelisted users\n */\ncontract Identity is IdentityAdminRole, SchemeGuard, Pausable {\n    using Roles for Roles.Role;\n    using SafeMath for uint256;\n\n    Roles.Role private blacklist;\n    Roles.Role private whitelist;\n    Roles.Role private contracts;\n\n    uint256 public whitelistedCount = 0;\n    uint256 public whitelistedContracts = 0;\n    uint256 public authenticationPeriod = 14;\n\n    mapping(address => uint256) public dateAuthenticated;\n    mapping(address => uint256) public dateAdded;\n\n    mapping(address => string) public addrToDID;\n    mapping(bytes32 => address) public didHashToAddress;\n\n    event BlacklistAdded(address indexed account);\n    event BlacklistRemoved(address indexed account);\n\n    event WhitelistedAdded(address indexed account);\n    event WhitelistedRemoved(address indexed account);\n\n    event ContractAdded(address indexed account);\n    event ContractRemoved(address indexed account);\n\n    constructor() public SchemeGuard(Avatar(0)) {}\n\n    /* @dev Sets a new value for authenticationPeriod.\n     * Can only be called by Identity Administrators.\n     * @param period new value for authenticationPeriod\n     */\n    function setAuthenticationPeriod(uint256 period) public onlyOwner whenNotPaused {\n        authenticationPeriod = period;\n    }\n\n    /* @dev Sets the authentication date of `account`\n     * to the current time.\n     * Can only be called by Identity Administrators.\n     * @param account address to change its auth date\n     */\n    function authenticate(address account)\n        public\n        onlyRegistered\n        onlyIdentityAdmin\n        whenNotPaused\n    {\n        dateAuthenticated[account] = now;\n    }\n\n    /* @dev Adds an address as whitelisted.\n     * Can only be called by Identity Administrators.\n     * @param account address to add as whitelisted\n     */\n    function addWhitelisted(address account)\n        public\n        onlyRegistered\n        onlyIdentityAdmin\n        whenNotPaused\n    {\n        _addWhitelisted(account);\n    }\n\n    /* @dev Adds an address as whitelisted under a specific ID\n     * @param account The address to add\n     * @param did the ID to add account under\n     */\n    function addWhitelistedWithDID(address account, string memory did)\n        public\n        onlyRegistered\n        onlyIdentityAdmin\n        whenNotPaused\n    {\n        _addWhitelistedWithDID(account, did);\n    }\n\n    /* @dev Removes an address as whitelisted.\n     * Can only be called by Identity Administrators.\n     * @param account address to remove as whitelisted\n     */\n    function removeWhitelisted(address account)\n        public\n        onlyRegistered\n        onlyIdentityAdmin\n        whenNotPaused\n    {\n        _removeWhitelisted(account);\n    }\n\n    /* @dev Renounces message sender from whitelisted\n     */\n    function renounceWhitelisted() public whenNotPaused {\n        _removeWhitelisted(msg.sender);\n    }\n\n    /* @dev Returns true if given address has been added to whitelist\n     * @param account the address to check\n     * @return a bool indicating weather the address is present in whitelist\n     */\n    function isWhitelisted(address account) public view returns (bool) {\n        uint256 daysSinceAuthentication = (now.sub(dateAuthenticated[account])) / 1 days;\n        return\n            (daysSinceAuthentication <= authenticationPeriod) && whitelist.has(account);\n    }\n\n    /* @dev Function that gives the date the given user was added\n     * @param account The address to check\n     * @return The date the address was added\n     */\n    function lastAuthenticated(address account) public view returns (uint256) {\n        return dateAuthenticated[account];\n    }\n\n    // /**\n    //  *\n    //  * @dev Function to transfer whitelisted privilege to another address\n    //  * relocates did of sender to give address\n    //  * @param account The address to transfer to\n    //  */\n    // function transferAccount(address account) public whenNotPaused {\n    //     ERC20 token = avatar.nativeToken();\n    //     require(!isBlacklisted(account), \"Cannot transfer to blacklisted\");\n    //     require(token.balanceOf(account) == 0, \"Account is already in use\");\n    //     require(isWhitelisted(msg.sender), \"Requester need to be whitelisted\");\n\n    //     require(\n    //         keccak256(bytes(addrToDID[account])) == keccak256(bytes(\"\")),\n    //         \"address already has DID\"\n    //     );\n\n    //     string memory did = addrToDID[msg.sender];\n    //     bytes32 pHash = keccak256(bytes(did));\n\n    //     uint256 balance = token.balanceOf(msg.sender);\n    //     token.transferFrom(msg.sender, account, balance);\n    //     _removeWhitelisted(msg.sender);\n    //     _addWhitelisted(account);\n    //     addrToDID[account] = did;\n    //     didHashToAddress[pHash] = account;\n    // }\n\n    /* @dev Adds an address to blacklist.\n     * Can only be called by Identity Administrators.\n     * @param account address to add as blacklisted\n     */\n    function addBlacklisted(address account)\n        public\n        onlyRegistered\n        onlyIdentityAdmin\n        whenNotPaused\n    {\n        blacklist.add(account);\n        emit BlacklistAdded(account);\n    }\n\n    /* @dev Removes an address from blacklist\n     * Can only be called by Identity Administrators.\n     * @param account address to remove as blacklisted\n     */\n    function removeBlacklisted(address account)\n        public\n        onlyRegistered\n        onlyIdentityAdmin\n        whenNotPaused\n    {\n        blacklist.remove(account);\n        emit BlacklistRemoved(account);\n    }\n\n    /* @dev Function to add a Contract to list of contracts\n     * @param account The address to add\n     */\n    function addContract(address account)\n        public\n        onlyRegistered\n        onlyIdentityAdmin\n        whenNotPaused\n    {\n        require(isContract(account), \"Given address is not a contract\");\n        contracts.add(account);\n        _addWhitelisted(account);\n\n        emit ContractAdded(account);\n    }\n\n    /* @dev Function to remove a Contract from list of contracts\n     * @param account The address to add\n     */\n    function removeContract(address account)\n        public\n        onlyRegistered\n        onlyIdentityAdmin\n        whenNotPaused\n    {\n        contracts.remove(account);\n        _removeWhitelisted(account);\n\n        emit ContractRemoved(account);\n    }\n\n    /* @dev Function to check if given contract is on list of contracts.\n     * @param address to check\n     * @return a bool indicating if address is on list of contracts\n     */\n    function isDAOContract(address account) public view returns (bool) {\n        return contracts.has(account);\n    }\n\n    /* @dev Internal function to add to whitelisted\n     * @param account the address to add\n     */\n    function _addWhitelisted(address account) internal {\n        whitelist.add(account);\n\n        whitelistedCount += 1;\n        dateAdded[account] = now;\n        dateAuthenticated[account] = now;\n\n        if (isContract(account)) {\n            whitelistedContracts += 1;\n        }\n\n        emit WhitelistedAdded(account);\n    }\n\n    /* @dev Internal whitelisting with did function.\n     * @param account the address to add\n     * @param did the id to register account under\n     */\n    function _addWhitelistedWithDID(address account, string memory did) internal {\n        bytes32 pHash = keccak256(bytes(did));\n        require(didHashToAddress[pHash] == address(0), \"DID already registered\");\n\n        addrToDID[account] = did;\n        didHashToAddress[pHash] = account;\n\n        _addWhitelisted(account);\n    }\n\n    /* @dev Internal function to remove from whitelisted\n     * @param account the address to add\n     */\n    function _removeWhitelisted(address account) internal {\n        whitelist.remove(account);\n\n        whitelistedCount -= 1;\n        delete dateAuthenticated[account];\n\n        if (isContract(account)) {\n            whitelistedContracts -= 1;\n        }\n\n        string memory did = addrToDID[account];\n        bytes32 pHash = keccak256(bytes(did));\n\n        delete dateAuthenticated[account];\n        delete addrToDID[account];\n        delete didHashToAddress[pHash];\n\n        emit WhitelistedRemoved(account);\n    }\n\n    /* @dev Returns true if given address has been added to the blacklist\n     * @param account the address to check\n     * @return a bool indicating weather the address is present in the blacklist\n     */\n    function isBlacklisted(address account) public view returns (bool) {\n        return blacklist.has(account);\n    }\n\n    /* @dev Function to see if given address is a contract\n     * @return true if address is a contract\n     */\n    function isContract(address _addr) internal view returns (bool) {\n        uint256 length;\n        assembly {\n            length := extcodesize(_addr)\n        }\n        return length > 0;\n    }\n}\n",
  "sourcePath": "/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/identity/Identity.sol",
  "ast": {
    "absolutePath": "/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/identity/Identity.sol",
    "exportedSymbols": {
      "Identity": [
        2380
      ]
    },
    "id": 2381,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 1869,
        "literals": [
          "solidity",
          ">",
          "0.5",
          ".4"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:9"
      },
      {
        "absolutePath": "openzeppelin-solidity/contracts/access/Roles.sol",
        "file": "openzeppelin-solidity/contracts/access/Roles.sol",
        "id": 1870,
        "nodeType": "ImportDirective",
        "scope": 2381,
        "sourceUnit": 20742,
        "src": "25:58:9",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "openzeppelin-solidity/contracts/math/SafeMath.sol",
        "file": "openzeppelin-solidity/contracts/math/SafeMath.sol",
        "id": 1871,
        "nodeType": "ImportDirective",
        "scope": 2381,
        "sourceUnit": 21309,
        "src": "84:59:9",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "openzeppelin-solidity/contracts/lifecycle/Pausable.sol",
        "file": "openzeppelin-solidity/contracts/lifecycle/Pausable.sol",
        "id": 1872,
        "nodeType": "ImportDirective",
        "scope": 2381,
        "sourceUnit": 21112,
        "src": "144:64:9",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@daostack/arc/contracts/controller/Avatar.sol",
        "file": "@daostack/arc/contracts/controller/Avatar.sol",
        "id": 1873,
        "nodeType": "ImportDirective",
        "scope": 2381,
        "sourceUnit": 12706,
        "src": "210:55:9",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/dao/schemes/SchemeGuard.sol",
        "file": "../dao/schemes/SchemeGuard.sol",
        "id": 1874,
        "nodeType": "ImportDirective",
        "scope": 2381,
        "sourceUnit": 1424,
        "src": "267:40:9",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/identity/IdentityAdminRole.sol",
        "file": "./IdentityAdminRole.sol",
        "id": 1875,
        "nodeType": "ImportDirective",
        "scope": 2381,
        "sourceUnit": 2508,
        "src": "308:33:9",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 1876,
              "name": "IdentityAdminRole",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 2507,
              "src": "477:17:9",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IdentityAdminRole_$2507",
                "typeString": "contract IdentityAdminRole"
              }
            },
            "id": 1877,
            "nodeType": "InheritanceSpecifier",
            "src": "477:17:9"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 1878,
              "name": "SchemeGuard",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 1423,
              "src": "496:11:9",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_SchemeGuard_$1423",
                "typeString": "contract SchemeGuard"
              }
            },
            "id": 1879,
            "nodeType": "InheritanceSpecifier",
            "src": "496:11:9"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 1880,
              "name": "Pausable",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 21111,
              "src": "509:8:9",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Pausable_$21111",
                "typeString": "contract Pausable"
              }
            },
            "id": 1881,
            "nodeType": "InheritanceSpecifier",
            "src": "509:8:9"
          }
        ],
        "contractDependencies": [
          1423,
          2507,
          20947,
          21111,
          21417
        ],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 2380,
        "linearizedBaseContracts": [
          2380,
          21111,
          20947,
          1423,
          2507,
          21417
        ],
        "name": "Identity",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 1884,
            "libraryName": {
              "contractScope": null,
              "id": 1882,
              "name": "Roles",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 20741,
              "src": "530:5:9",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Roles_$20741",
                "typeString": "library Roles"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "524:27:9",
            "typeName": {
              "contractScope": null,
              "id": 1883,
              "name": "Roles.Role",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 20654,
              "src": "540:10:9",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_Role_$20654_storage_ptr",
                "typeString": "struct Roles.Role"
              }
            }
          },
          {
            "id": 1887,
            "libraryName": {
              "contractScope": null,
              "id": 1885,
              "name": "SafeMath",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 21308,
              "src": "562:8:9",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_SafeMath_$21308",
                "typeString": "library SafeMath"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "556:27:9",
            "typeName": {
              "id": 1886,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "575:7:9",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            }
          },
          {
            "constant": false,
            "id": 1889,
            "name": "blacklist",
            "nodeType": "VariableDeclaration",
            "scope": 2380,
            "src": "589:28:9",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_struct$_Role_$20654_storage",
              "typeString": "struct Roles.Role"
            },
            "typeName": {
              "contractScope": null,
              "id": 1888,
              "name": "Roles.Role",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 20654,
              "src": "589:10:9",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_Role_$20654_storage_ptr",
                "typeString": "struct Roles.Role"
              }
            },
            "value": null,
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 1891,
            "name": "whitelist",
            "nodeType": "VariableDeclaration",
            "scope": 2380,
            "src": "623:28:9",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_struct$_Role_$20654_storage",
              "typeString": "struct Roles.Role"
            },
            "typeName": {
              "contractScope": null,
              "id": 1890,
              "name": "Roles.Role",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 20654,
              "src": "623:10:9",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_Role_$20654_storage_ptr",
                "typeString": "struct Roles.Role"
              }
            },
            "value": null,
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 1893,
            "name": "contracts",
            "nodeType": "VariableDeclaration",
            "scope": 2380,
            "src": "657:28:9",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_struct$_Role_$20654_storage",
              "typeString": "struct Roles.Role"
            },
            "typeName": {
              "contractScope": null,
              "id": 1892,
              "name": "Roles.Role",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 20654,
              "src": "657:10:9",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_Role_$20654_storage_ptr",
                "typeString": "struct Roles.Role"
              }
            },
            "value": null,
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 1896,
            "name": "whitelistedCount",
            "nodeType": "VariableDeclaration",
            "scope": 2380,
            "src": "692:35:9",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 1894,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "692:7:9",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "30",
              "id": 1895,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "726:1:9",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_0_by_1",
                "typeString": "int_const 0"
              },
              "value": "0"
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 1899,
            "name": "whitelistedContracts",
            "nodeType": "VariableDeclaration",
            "scope": 2380,
            "src": "733:39:9",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 1897,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "733:7:9",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "30",
              "id": 1898,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "771:1:9",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_0_by_1",
                "typeString": "int_const 0"
              },
              "value": "0"
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 1902,
            "name": "authenticationPeriod",
            "nodeType": "VariableDeclaration",
            "scope": 2380,
            "src": "778:40:9",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 1900,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "778:7:9",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "3134",
              "id": 1901,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "816:2:9",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_14_by_1",
                "typeString": "int_const 14"
              },
              "value": "14"
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 1906,
            "name": "dateAuthenticated",
            "nodeType": "VariableDeclaration",
            "scope": 2380,
            "src": "825:52:9",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
              "typeString": "mapping(address => uint256)"
            },
            "typeName": {
              "id": 1905,
              "keyType": {
                "id": 1903,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "833:7:9",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "825:27:9",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                "typeString": "mapping(address => uint256)"
              },
              "valueType": {
                "id": 1904,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "844:7:9",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 1910,
            "name": "dateAdded",
            "nodeType": "VariableDeclaration",
            "scope": 2380,
            "src": "883:44:9",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
              "typeString": "mapping(address => uint256)"
            },
            "typeName": {
              "id": 1909,
              "keyType": {
                "id": 1907,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "891:7:9",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "883:27:9",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                "typeString": "mapping(address => uint256)"
              },
              "valueType": {
                "id": 1908,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "902:7:9",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 1914,
            "name": "addrToDID",
            "nodeType": "VariableDeclaration",
            "scope": 2380,
            "src": "934:43:9",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_string_storage_$",
              "typeString": "mapping(address => string)"
            },
            "typeName": {
              "id": 1913,
              "keyType": {
                "id": 1911,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "942:7:9",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "934:26:9",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_string_storage_$",
                "typeString": "mapping(address => string)"
              },
              "valueType": {
                "id": 1912,
                "name": "string",
                "nodeType": "ElementaryTypeName",
                "src": "953:6:9",
                "typeDescriptions": {
                  "typeIdentifier": "t_string_storage_ptr",
                  "typeString": "string"
                }
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 1918,
            "name": "didHashToAddress",
            "nodeType": "VariableDeclaration",
            "scope": 2380,
            "src": "983:51:9",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
              "typeString": "mapping(bytes32 => address)"
            },
            "typeName": {
              "id": 1917,
              "keyType": {
                "id": 1915,
                "name": "bytes32",
                "nodeType": "ElementaryTypeName",
                "src": "991:7:9",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                }
              },
              "nodeType": "Mapping",
              "src": "983:27:9",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
                "typeString": "mapping(bytes32 => address)"
              },
              "valueType": {
                "id": 1916,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "1002:7:9",
                "stateMutability": "nonpayable",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 1922,
            "name": "BlacklistAdded",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 1921,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1920,
                  "indexed": true,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 1922,
                  "src": "1062:23:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1919,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1062:7:9",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1061:25:9"
            },
            "src": "1041:46:9"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 1926,
            "name": "BlacklistRemoved",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 1925,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1924,
                  "indexed": true,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 1926,
                  "src": "1115:23:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1923,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1115:7:9",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1114:25:9"
            },
            "src": "1092:48:9"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 1930,
            "name": "WhitelistedAdded",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 1929,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1928,
                  "indexed": true,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 1930,
                  "src": "1169:23:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1927,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1169:7:9",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1168:25:9"
            },
            "src": "1146:48:9"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 1934,
            "name": "WhitelistedRemoved",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 1933,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1932,
                  "indexed": true,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 1934,
                  "src": "1224:23:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1931,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1224:7:9",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1223:25:9"
            },
            "src": "1199:50:9"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 1938,
            "name": "ContractAdded",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 1937,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1936,
                  "indexed": true,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 1938,
                  "src": "1275:23:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1935,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1275:7:9",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1274:25:9"
            },
            "src": "1255:45:9"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 1942,
            "name": "ContractRemoved",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 1941,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1940,
                  "indexed": true,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 1942,
                  "src": "1327:23:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1939,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1327:7:9",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1326:25:9"
            },
            "src": "1305:47:9"
          },
          {
            "body": {
              "id": 1950,
              "nodeType": "Block",
              "src": "1402:2:9",
              "statements": []
            },
            "documentation": null,
            "id": 1951,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 1946,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1398:1:9",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        }
                      ],
                      "id": 1945,
                      "name": "Avatar",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12705,
                      "src": "1391:6:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_Avatar_$12705_$",
                        "typeString": "type(contract Avatar)"
                      }
                    },
                    "id": 1947,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1391:9:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Avatar_$12705",
                      "typeString": "contract Avatar"
                    }
                  }
                ],
                "id": 1948,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1944,
                  "name": "SchemeGuard",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1423,
                  "src": "1379:11:9",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_SchemeGuard_$1423_$",
                    "typeString": "type(contract SchemeGuard)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1379:22:9"
              }
            ],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1943,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1369:2:9"
            },
            "returnParameters": {
              "id": 1949,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1402:0:9"
            },
            "scope": 2380,
            "src": "1358:46:9",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1964,
              "nodeType": "Block",
              "src": "1663:46:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1962,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1960,
                      "name": "authenticationPeriod",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1902,
                      "src": "1673:20:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 1961,
                      "name": "period",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1953,
                      "src": "1696:6:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "1673:29:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1963,
                  "nodeType": "ExpressionStatement",
                  "src": "1673:29:9"
                }
              ]
            },
            "documentation": null,
            "id": 1965,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 1956,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1955,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 21351,
                  "src": "1639:9:9",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1639:9:9"
              },
              {
                "arguments": null,
                "id": 1958,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1957,
                  "name": "whenNotPaused",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 21068,
                  "src": "1649:13:9",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1649:13:9"
              }
            ],
            "name": "setAuthenticationPeriod",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1954,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1953,
                  "name": "period",
                  "nodeType": "VariableDeclaration",
                  "scope": 1965,
                  "src": "1616:14:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1952,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1616:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1615:16:9"
            },
            "returnParameters": {
              "id": 1959,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1663:0:9"
            },
            "scope": 2380,
            "src": "1583:126:9",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1982,
              "nodeType": "Block",
              "src": "2042:49:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1980,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 1976,
                        "name": "dateAuthenticated",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1906,
                        "src": "2052:17:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 1978,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 1977,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1967,
                        "src": "2070:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "2052:26:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 1979,
                      "name": "now",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 22173,
                      "src": "2081:3:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2052:32:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1981,
                  "nodeType": "ExpressionStatement",
                  "src": "2052:32:9"
                }
              ]
            },
            "documentation": null,
            "id": 1983,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 1970,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1969,
                  "name": "onlyRegistered",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1335,
                  "src": "1975:14:9",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1975:14:9"
              },
              {
                "arguments": null,
                "id": 1972,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1971,
                  "name": "onlyIdentityAdmin",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 2420,
                  "src": "1998:17:9",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1998:17:9"
              },
              {
                "arguments": null,
                "id": 1974,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1973,
                  "name": "whenNotPaused",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 21068,
                  "src": "2024:13:9",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2024:13:9"
              }
            ],
            "name": "authenticate",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1968,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1967,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 1983,
                  "src": "1935:15:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1966,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1935:7:9",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1934:17:9"
            },
            "returnParameters": {
              "id": 1975,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2042:0:9"
            },
            "scope": 2380,
            "src": "1913:178:9",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1998,
              "nodeType": "Block",
              "src": "2386:41:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1995,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1985,
                        "src": "2412:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 1994,
                      "name": "_addWhitelisted",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2244,
                      "src": "2396:15:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 1996,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2396:24:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1997,
                  "nodeType": "ExpressionStatement",
                  "src": "2396:24:9"
                }
              ]
            },
            "documentation": null,
            "id": 1999,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 1988,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1987,
                  "name": "onlyRegistered",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1335,
                  "src": "2319:14:9",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2319:14:9"
              },
              {
                "arguments": null,
                "id": 1990,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1989,
                  "name": "onlyIdentityAdmin",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 2420,
                  "src": "2342:17:9",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2342:17:9"
              },
              {
                "arguments": null,
                "id": 1992,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1991,
                  "name": "whenNotPaused",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 21068,
                  "src": "2368:13:9",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2368:13:9"
              }
            ],
            "name": "addWhitelisted",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1986,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1985,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 1999,
                  "src": "2279:15:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1984,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2279:7:9",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2278:17:9"
            },
            "returnParameters": {
              "id": 1993,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2386:0:9"
            },
            "scope": 2380,
            "src": "2255:172:9",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 2017,
              "nodeType": "Block",
              "src": "2748:53:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2013,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2001,
                        "src": "2781:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2014,
                        "name": "did",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2003,
                        "src": "2790:3:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 2012,
                      "name": "_addWhitelistedWithDID",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2287,
                      "src": "2758:22:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (address,string memory)"
                      }
                    },
                    "id": 2015,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2758:36:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2016,
                  "nodeType": "ExpressionStatement",
                  "src": "2758:36:9"
                }
              ]
            },
            "documentation": null,
            "id": 2018,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 2006,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 2005,
                  "name": "onlyRegistered",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1335,
                  "src": "2681:14:9",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2681:14:9"
              },
              {
                "arguments": null,
                "id": 2008,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 2007,
                  "name": "onlyIdentityAdmin",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 2420,
                  "src": "2704:17:9",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2704:17:9"
              },
              {
                "arguments": null,
                "id": 2010,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 2009,
                  "name": "whenNotPaused",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 21068,
                  "src": "2730:13:9",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2730:13:9"
              }
            ],
            "name": "addWhitelistedWithDID",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2004,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2001,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 2018,
                  "src": "2622:15:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2000,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2622:7:9",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2003,
                  "name": "did",
                  "nodeType": "VariableDeclaration",
                  "scope": 2018,
                  "src": "2639:17:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 2002,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "2639:6:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2621:36:9"
            },
            "returnParameters": {
              "id": 2011,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2748:0:9"
            },
            "scope": 2380,
            "src": "2591:210:9",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 2033,
              "nodeType": "Block",
              "src": "3105:44:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2030,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2020,
                        "src": "3134:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 2029,
                      "name": "_removeWhitelisted",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2350,
                      "src": "3115:18:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 2031,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3115:27:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2032,
                  "nodeType": "ExpressionStatement",
                  "src": "3115:27:9"
                }
              ]
            },
            "documentation": null,
            "id": 2034,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 2023,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 2022,
                  "name": "onlyRegistered",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1335,
                  "src": "3038:14:9",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "3038:14:9"
              },
              {
                "arguments": null,
                "id": 2025,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 2024,
                  "name": "onlyIdentityAdmin",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 2420,
                  "src": "3061:17:9",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "3061:17:9"
              },
              {
                "arguments": null,
                "id": 2027,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 2026,
                  "name": "whenNotPaused",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 21068,
                  "src": "3087:13:9",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "3087:13:9"
              }
            ],
            "name": "removeWhitelisted",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2021,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2020,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 2034,
                  "src": "2998:15:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2019,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2998:7:9",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2997:17:9"
            },
            "returnParameters": {
              "id": 2028,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3105:0:9"
            },
            "scope": 2380,
            "src": "2971:178:9",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 2044,
              "nodeType": "Block",
              "src": "3269:47:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2040,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 22171,
                          "src": "3298:3:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 2041,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "3298:10:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 2039,
                      "name": "_removeWhitelisted",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2350,
                      "src": "3279:18:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 2042,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3279:30:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2043,
                  "nodeType": "ExpressionStatement",
                  "src": "3279:30:9"
                }
              ]
            },
            "documentation": null,
            "id": 2045,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 2037,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 2036,
                  "name": "whenNotPaused",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 21068,
                  "src": "3255:13:9",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "3255:13:9"
              }
            ],
            "name": "renounceWhitelisted",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2035,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3245:2:9"
            },
            "returnParameters": {
              "id": 2038,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3269:0:9"
            },
            "scope": 2380,
            "src": "3217:99:9",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 2074,
              "nodeType": "Block",
              "src": "3587:201:9",
              "statements": [
                {
                  "assignments": [
                    2053
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2053,
                      "name": "daysSinceAuthentication",
                      "nodeType": "VariableDeclaration",
                      "scope": 2074,
                      "src": "3597:31:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2052,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "3597:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2063,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2062,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 2056,
                                "name": "dateAuthenticated",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1906,
                                "src": "3640:17:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                  "typeString": "mapping(address => uint256)"
                                }
                              },
                              "id": 2058,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 2057,
                                "name": "account",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2047,
                                "src": "3658:7:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "3640:26:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 2054,
                              "name": "now",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 22173,
                              "src": "3632:3:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 2055,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sub",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 21263,
                            "src": "3632:7:9",
                            "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": 2059,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3632:35:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "id": 2060,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "3631:37:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "/",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "31",
                      "id": 2061,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3671:6:9",
                      "subdenomination": "days",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_86400_by_1",
                        "typeString": "int_const 86400"
                      },
                      "value": "1"
                    },
                    "src": "3631:46:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3597:80:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 2072,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 2066,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 2064,
                            "name": "daysSinceAuthentication",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2053,
                            "src": "3707:23:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 2065,
                            "name": "authenticationPeriod",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1902,
                            "src": "3734:20:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "3707:47:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        }
                      ],
                      "id": 2067,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "3706:49:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 2070,
                          "name": "account",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2047,
                          "src": "3773:7:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 2068,
                          "name": "whitelist",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1891,
                          "src": "3759:9:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Role_$20654_storage",
                            "typeString": "struct Roles.Role storage ref"
                          }
                        },
                        "id": 2069,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "has",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 20740,
                        "src": "3759:13:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_struct$_Role_$20654_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_Role_$20654_storage_ptr_$",
                          "typeString": "function (struct Roles.Role storage pointer,address) view returns (bool)"
                        }
                      },
                      "id": 2071,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "3759:22:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "3706:75:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 2051,
                  "id": 2073,
                  "nodeType": "Return",
                  "src": "3687:94:9"
                }
              ]
            },
            "documentation": null,
            "id": 2075,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isWhitelisted",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2048,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2047,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 2075,
                  "src": "3543:15:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2046,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3543:7:9",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3542:17:9"
            },
            "returnParameters": {
              "id": 2051,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2050,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2075,
                  "src": "3581:4:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 2049,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "3581:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3580:6:9"
            },
            "scope": 2380,
            "src": "3520:268:9",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 2086,
              "nodeType": "Block",
              "src": "4031:50:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 2082,
                      "name": "dateAuthenticated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1906,
                      "src": "4048:17:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                        "typeString": "mapping(address => uint256)"
                      }
                    },
                    "id": 2084,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 2083,
                      "name": "account",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2077,
                      "src": "4066:7:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "4048:26:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 2081,
                  "id": 2085,
                  "nodeType": "Return",
                  "src": "4041:33:9"
                }
              ]
            },
            "documentation": null,
            "id": 2087,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "lastAuthenticated",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2078,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2077,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 2087,
                  "src": "3984:15:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2076,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3984:7:9",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3983:17:9"
            },
            "returnParameters": {
              "id": 2081,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2080,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2087,
                  "src": "4022:7:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2079,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4022:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4021:9:9"
            },
            "scope": 2380,
            "src": "3957:124:9",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 2108,
              "nodeType": "Block",
              "src": "5497:77:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2101,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2089,
                        "src": "5521:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 2098,
                        "name": "blacklist",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1889,
                        "src": "5507:9:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$20654_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 2100,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "add",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 20686,
                      "src": "5507:13:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$20654_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$20654_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address)"
                      }
                    },
                    "id": 2102,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5507:22:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2103,
                  "nodeType": "ExpressionStatement",
                  "src": "5507:22:9"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2105,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2089,
                        "src": "5559:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 2104,
                      "name": "BlacklistAdded",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1922,
                      "src": "5544:14:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 2106,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5544:23:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2107,
                  "nodeType": "EmitStatement",
                  "src": "5539:28:9"
                }
              ]
            },
            "documentation": null,
            "id": 2109,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 2092,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 2091,
                  "name": "onlyRegistered",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1335,
                  "src": "5430:14:9",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5430:14:9"
              },
              {
                "arguments": null,
                "id": 2094,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 2093,
                  "name": "onlyIdentityAdmin",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 2420,
                  "src": "5453:17:9",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5453:17:9"
              },
              {
                "arguments": null,
                "id": 2096,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 2095,
                  "name": "whenNotPaused",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 21068,
                  "src": "5479:13:9",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5479:13:9"
              }
            ],
            "name": "addBlacklisted",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2090,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2089,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 2109,
                  "src": "5390:15:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2088,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5390:7:9",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5389:17:9"
            },
            "returnParameters": {
              "id": 2097,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5497:0:9"
            },
            "scope": 2380,
            "src": "5366:208:9",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 2130,
              "nodeType": "Block",
              "src": "5877:82:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2123,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2111,
                        "src": "5904:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 2120,
                        "name": "blacklist",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1889,
                        "src": "5887:9:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$20654_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 2122,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "remove",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 20717,
                      "src": "5887:16:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$20654_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$20654_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address)"
                      }
                    },
                    "id": 2124,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5887:25:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2125,
                  "nodeType": "ExpressionStatement",
                  "src": "5887:25:9"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2127,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2111,
                        "src": "5944:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 2126,
                      "name": "BlacklistRemoved",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1926,
                      "src": "5927:16:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 2128,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5927:25:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2129,
                  "nodeType": "EmitStatement",
                  "src": "5922:30:9"
                }
              ]
            },
            "documentation": null,
            "id": 2131,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 2114,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 2113,
                  "name": "onlyRegistered",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1335,
                  "src": "5810:14:9",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5810:14:9"
              },
              {
                "arguments": null,
                "id": 2116,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 2115,
                  "name": "onlyIdentityAdmin",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 2420,
                  "src": "5833:17:9",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5833:17:9"
              },
              {
                "arguments": null,
                "id": 2118,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 2117,
                  "name": "whenNotPaused",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 21068,
                  "src": "5859:13:9",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5859:13:9"
              }
            ],
            "name": "removeBlacklisted",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2112,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2111,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 2131,
                  "src": "5770:15:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2110,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5770:7:9",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5769:17:9"
            },
            "returnParameters": {
              "id": 2119,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5877:0:9"
            },
            "scope": 2380,
            "src": "5743:216:9",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 2163,
              "nodeType": "Block",
              "src": "6202:184:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 2144,
                            "name": "account",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2133,
                            "src": "6231:7:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 2143,
                          "name": "isContract",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2379,
                          "src": "6220:10:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                            "typeString": "function (address) view returns (bool)"
                          }
                        },
                        "id": 2145,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "6220:19:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "476976656e2061646472657373206973206e6f74206120636f6e7472616374",
                        "id": 2146,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "6241:33:9",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_c016cb8d50f495ff112d56868bcdc02233dd830483c688e57c25753f3ef679bb",
                          "typeString": "literal_string \"Given address is not a contract\""
                        },
                        "value": "Given address is not a contract"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_c016cb8d50f495ff112d56868bcdc02233dd830483c688e57c25753f3ef679bb",
                          "typeString": "literal_string \"Given address is not a contract\""
                        }
                      ],
                      "id": 2142,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        22174,
                        22175
                      ],
                      "referencedDeclaration": 22175,
                      "src": "6212:7:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 2147,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6212:63:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2148,
                  "nodeType": "ExpressionStatement",
                  "src": "6212:63:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2152,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2133,
                        "src": "6299:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 2149,
                        "name": "contracts",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1893,
                        "src": "6285:9:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$20654_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 2151,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "add",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 20686,
                      "src": "6285:13:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$20654_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$20654_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address)"
                      }
                    },
                    "id": 2153,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6285:22:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2154,
                  "nodeType": "ExpressionStatement",
                  "src": "6285:22:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2156,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2133,
                        "src": "6333:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 2155,
                      "name": "_addWhitelisted",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2244,
                      "src": "6317:15:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 2157,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6317:24:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2158,
                  "nodeType": "ExpressionStatement",
                  "src": "6317:24:9"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2160,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2133,
                        "src": "6371:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 2159,
                      "name": "ContractAdded",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1938,
                      "src": "6357:13:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 2161,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6357:22:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2162,
                  "nodeType": "EmitStatement",
                  "src": "6352:27:9"
                }
              ]
            },
            "documentation": null,
            "id": 2164,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 2136,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 2135,
                  "name": "onlyRegistered",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1335,
                  "src": "6135:14:9",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6135:14:9"
              },
              {
                "arguments": null,
                "id": 2138,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 2137,
                  "name": "onlyIdentityAdmin",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 2420,
                  "src": "6158:17:9",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6158:17:9"
              },
              {
                "arguments": null,
                "id": 2140,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 2139,
                  "name": "whenNotPaused",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 21068,
                  "src": "6184:13:9",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6184:13:9"
              }
            ],
            "name": "addContract",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2134,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2133,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 2164,
                  "src": "6095:15:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2132,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6095:7:9",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6094:17:9"
            },
            "returnParameters": {
              "id": 2141,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6202:0:9"
            },
            "scope": 2380,
            "src": "6074:312:9",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 2189,
              "nodeType": "Block",
              "src": "6637:119:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2178,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2166,
                        "src": "6664:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 2175,
                        "name": "contracts",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1893,
                        "src": "6647:9:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$20654_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 2177,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "remove",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 20717,
                      "src": "6647:16:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$20654_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$20654_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address)"
                      }
                    },
                    "id": 2179,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6647:25:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2180,
                  "nodeType": "ExpressionStatement",
                  "src": "6647:25:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2182,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2166,
                        "src": "6701:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 2181,
                      "name": "_removeWhitelisted",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2350,
                      "src": "6682:18:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 2183,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6682:27:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2184,
                  "nodeType": "ExpressionStatement",
                  "src": "6682:27:9"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2186,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2166,
                        "src": "6741:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 2185,
                      "name": "ContractRemoved",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1942,
                      "src": "6725:15:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 2187,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6725:24:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2188,
                  "nodeType": "EmitStatement",
                  "src": "6720:29:9"
                }
              ]
            },
            "documentation": null,
            "id": 2190,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 2169,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 2168,
                  "name": "onlyRegistered",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1335,
                  "src": "6570:14:9",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6570:14:9"
              },
              {
                "arguments": null,
                "id": 2171,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 2170,
                  "name": "onlyIdentityAdmin",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 2420,
                  "src": "6593:17:9",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6593:17:9"
              },
              {
                "arguments": null,
                "id": 2173,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 2172,
                  "name": "whenNotPaused",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 21068,
                  "src": "6619:13:9",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6619:13:9"
              }
            ],
            "name": "removeContract",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2167,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2166,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 2190,
                  "src": "6530:15:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2165,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6530:7:9",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6529:17:9"
            },
            "returnParameters": {
              "id": 2174,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6637:0:9"
            },
            "scope": 2380,
            "src": "6506:250:9",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 2202,
              "nodeType": "Block",
              "src": "7009:46:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2199,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2192,
                        "src": "7040:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 2197,
                        "name": "contracts",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1893,
                        "src": "7026:9:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$20654_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 2198,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "has",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 20740,
                      "src": "7026:13:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_Role_$20654_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_Role_$20654_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address) view returns (bool)"
                      }
                    },
                    "id": 2200,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7026:22:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 2196,
                  "id": 2201,
                  "nodeType": "Return",
                  "src": "7019:29:9"
                }
              ]
            },
            "documentation": null,
            "id": 2203,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isDAOContract",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2193,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2192,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 2203,
                  "src": "6965:15:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2191,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6965:7:9",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6964:17:9"
            },
            "returnParameters": {
              "id": 2196,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2195,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2203,
                  "src": "7003:4:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 2194,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "7003:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7002:6:9"
            },
            "scope": 2380,
            "src": "6942:113:9",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 2243,
              "nodeType": "Block",
              "src": "7213:273:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2211,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2205,
                        "src": "7237:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 2208,
                        "name": "whitelist",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1891,
                        "src": "7223:9:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$20654_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 2210,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "add",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 20686,
                      "src": "7223:13:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$20654_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$20654_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address)"
                      }
                    },
                    "id": 2212,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7223:22:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2213,
                  "nodeType": "ExpressionStatement",
                  "src": "7223:22:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2216,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 2214,
                      "name": "whitelistedCount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1896,
                      "src": "7256:16:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "+=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "31",
                      "id": 2215,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "7276:1:9",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "src": "7256:21:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 2217,
                  "nodeType": "ExpressionStatement",
                  "src": "7256:21:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2222,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 2218,
                        "name": "dateAdded",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1910,
                        "src": "7287:9:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 2220,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 2219,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2205,
                        "src": "7297:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "7287:18:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 2221,
                      "name": "now",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 22173,
                      "src": "7308:3:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "7287:24:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 2223,
                  "nodeType": "ExpressionStatement",
                  "src": "7287:24:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2228,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 2224,
                        "name": "dateAuthenticated",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1906,
                        "src": "7321:17:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 2226,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 2225,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2205,
                        "src": "7339:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "7321:26:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 2227,
                      "name": "now",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 22173,
                      "src": "7350:3:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "7321:32:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 2229,
                  "nodeType": "ExpressionStatement",
                  "src": "7321:32:9"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2231,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2205,
                        "src": "7379:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 2230,
                      "name": "isContract",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2379,
                      "src": "7368:10:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                        "typeString": "function (address) view returns (bool)"
                      }
                    },
                    "id": 2232,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7368:19:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 2238,
                  "nodeType": "IfStatement",
                  "src": "7364:75:9",
                  "trueBody": {
                    "id": 2237,
                    "nodeType": "Block",
                    "src": "7389:50:9",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 2235,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 2233,
                            "name": "whitelistedContracts",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1899,
                            "src": "7403:20:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "31",
                            "id": 2234,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "7427:1:9",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "src": "7403:25:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 2236,
                        "nodeType": "ExpressionStatement",
                        "src": "7403:25:9"
                      }
                    ]
                  }
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2240,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2205,
                        "src": "7471:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 2239,
                      "name": "WhitelistedAdded",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1930,
                      "src": "7454:16:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 2241,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7454:25:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2242,
                  "nodeType": "EmitStatement",
                  "src": "7449:30:9"
                }
              ]
            },
            "documentation": null,
            "id": 2244,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_addWhitelisted",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2206,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2205,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 2244,
                  "src": "7187:15:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2204,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7187:7:9",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7186:17:9"
            },
            "returnParameters": {
              "id": 2207,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7213:0:9"
            },
            "scope": 2380,
            "src": "7162:324:9",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2286,
              "nodeType": "Block",
              "src": "7722:249:9",
              "statements": [
                {
                  "assignments": [
                    2252
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2252,
                      "name": "pHash",
                      "nodeType": "VariableDeclaration",
                      "scope": 2286,
                      "src": "7732:13:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 2251,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "7732:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2258,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 2255,
                            "name": "did",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2248,
                            "src": "7764:3:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          ],
                          "id": 2254,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "7758:5:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                            "typeString": "type(bytes storage pointer)"
                          },
                          "typeName": "bytes"
                        },
                        "id": 2256,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7758:10:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 2253,
                      "name": "keccak256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 22165,
                      "src": "7748:9:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (bytes memory) pure returns (bytes32)"
                      }
                    },
                    "id": 2257,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7748:21:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7732:37:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 2266,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 2260,
                            "name": "didHashToAddress",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1918,
                            "src": "7787:16:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
                              "typeString": "mapping(bytes32 => address)"
                            }
                          },
                          "id": 2262,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 2261,
                            "name": "pHash",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2252,
                            "src": "7804:5:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "7787:23:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 2264,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "7822:1:9",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 2263,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "7814:7:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 2265,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7814:10:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "7787:37:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "44494420616c72656164792072656769737465726564",
                        "id": 2267,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7826:24:9",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_761cab18940f21d9559eeced38da846400e6144eb9c0e8f0f4c044714a4f97c4",
                          "typeString": "literal_string \"DID already registered\""
                        },
                        "value": "DID already registered"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_761cab18940f21d9559eeced38da846400e6144eb9c0e8f0f4c044714a4f97c4",
                          "typeString": "literal_string \"DID already registered\""
                        }
                      ],
                      "id": 2259,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        22174,
                        22175
                      ],
                      "referencedDeclaration": 22175,
                      "src": "7779:7:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 2268,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7779:72:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2269,
                  "nodeType": "ExpressionStatement",
                  "src": "7779:72:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2274,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 2270,
                        "name": "addrToDID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1914,
                        "src": "7862:9:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_string_storage_$",
                          "typeString": "mapping(address => string storage ref)"
                        }
                      },
                      "id": 2272,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 2271,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2246,
                        "src": "7872:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "7862:18:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_storage",
                        "typeString": "string storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 2273,
                      "name": "did",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2248,
                      "src": "7883:3:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string memory"
                      }
                    },
                    "src": "7862:24:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage",
                      "typeString": "string storage ref"
                    }
                  },
                  "id": 2275,
                  "nodeType": "ExpressionStatement",
                  "src": "7862:24:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2280,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 2276,
                        "name": "didHashToAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1918,
                        "src": "7896:16:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
                          "typeString": "mapping(bytes32 => address)"
                        }
                      },
                      "id": 2278,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 2277,
                        "name": "pHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2252,
                        "src": "7913:5:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "7896:23:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 2279,
                      "name": "account",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2246,
                      "src": "7922:7:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "7896:33:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 2281,
                  "nodeType": "ExpressionStatement",
                  "src": "7896:33:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2283,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2246,
                        "src": "7956:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 2282,
                      "name": "_addWhitelisted",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2244,
                      "src": "7940:15:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 2284,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7940:24:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2285,
                  "nodeType": "ExpressionStatement",
                  "src": "7940:24:9"
                }
              ]
            },
            "documentation": null,
            "id": 2287,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_addWhitelistedWithDID",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2249,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2246,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 2287,
                  "src": "7677:15:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2245,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7677:7:9",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2248,
                  "name": "did",
                  "nodeType": "VariableDeclaration",
                  "scope": 2287,
                  "src": "7694:17:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 2247,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "7694:6:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7676:36:9"
            },
            "returnParameters": {
              "id": 2250,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7722:0:9"
            },
            "scope": 2380,
            "src": "7645:326:9",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2349,
              "nodeType": "Block",
              "src": "8137:460:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2295,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2289,
                        "src": "8164:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 2292,
                        "name": "whitelist",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1891,
                        "src": "8147:9:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$20654_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 2294,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "remove",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 20717,
                      "src": "8147:16:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$20654_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$20654_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address)"
                      }
                    },
                    "id": 2296,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8147:25:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2297,
                  "nodeType": "ExpressionStatement",
                  "src": "8147:25:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2300,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 2298,
                      "name": "whitelistedCount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1896,
                      "src": "8183:16:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "-=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "31",
                      "id": 2299,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "8203:1:9",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "src": "8183:21:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 2301,
                  "nodeType": "ExpressionStatement",
                  "src": "8183:21:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2305,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "delete",
                    "prefix": true,
                    "src": "8214:33:9",
                    "subExpression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 2302,
                        "name": "dateAuthenticated",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1906,
                        "src": "8221:17:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 2304,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 2303,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2289,
                        "src": "8239:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "8221:26:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2306,
                  "nodeType": "ExpressionStatement",
                  "src": "8214:33:9"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2308,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2289,
                        "src": "8273:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 2307,
                      "name": "isContract",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2379,
                      "src": "8262:10:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                        "typeString": "function (address) view returns (bool)"
                      }
                    },
                    "id": 2309,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8262:19:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 2315,
                  "nodeType": "IfStatement",
                  "src": "8258:75:9",
                  "trueBody": {
                    "id": 2314,
                    "nodeType": "Block",
                    "src": "8283:50:9",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 2312,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 2310,
                            "name": "whitelistedContracts",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1899,
                            "src": "8297:20:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "-=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "31",
                            "id": 2311,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "8321:1:9",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "src": "8297:25:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 2313,
                        "nodeType": "ExpressionStatement",
                        "src": "8297:25:9"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    2317
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2317,
                      "name": "did",
                      "nodeType": "VariableDeclaration",
                      "scope": 2349,
                      "src": "8343:17:9",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string"
                      },
                      "typeName": {
                        "id": 2316,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "8343:6:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage_ptr",
                          "typeString": "string"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2321,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 2318,
                      "name": "addrToDID",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1914,
                      "src": "8363:9:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_string_storage_$",
                        "typeString": "mapping(address => string storage ref)"
                      }
                    },
                    "id": 2320,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 2319,
                      "name": "account",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2289,
                      "src": "8373:7:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "8363:18:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage",
                      "typeString": "string storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8343:38:9"
                },
                {
                  "assignments": [
                    2323
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2323,
                      "name": "pHash",
                      "nodeType": "VariableDeclaration",
                      "scope": 2349,
                      "src": "8391:13:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 2322,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "8391:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2329,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 2326,
                            "name": "did",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2317,
                            "src": "8423:3:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          ],
                          "id": 2325,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "8417:5:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                            "typeString": "type(bytes storage pointer)"
                          },
                          "typeName": "bytes"
                        },
                        "id": 2327,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "8417:10:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 2324,
                      "name": "keccak256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 22165,
                      "src": "8407:9:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (bytes memory) pure returns (bytes32)"
                      }
                    },
                    "id": 2328,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8407:21:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8391:37:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2333,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "delete",
                    "prefix": true,
                    "src": "8439:33:9",
                    "subExpression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 2330,
                        "name": "dateAuthenticated",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1906,
                        "src": "8446:17:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 2332,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 2331,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2289,
                        "src": "8464:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "8446:26:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2334,
                  "nodeType": "ExpressionStatement",
                  "src": "8439:33:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2338,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "delete",
                    "prefix": true,
                    "src": "8482:25:9",
                    "subExpression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 2335,
                        "name": "addrToDID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1914,
                        "src": "8489:9:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_string_storage_$",
                          "typeString": "mapping(address => string storage ref)"
                        }
                      },
                      "id": 2337,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 2336,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2289,
                        "src": "8499:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "8489:18:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_storage",
                        "typeString": "string storage ref"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2339,
                  "nodeType": "ExpressionStatement",
                  "src": "8482:25:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2343,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "delete",
                    "prefix": true,
                    "src": "8517:30:9",
                    "subExpression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 2340,
                        "name": "didHashToAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1918,
                        "src": "8524:16:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
                          "typeString": "mapping(bytes32 => address)"
                        }
                      },
                      "id": 2342,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 2341,
                        "name": "pHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2323,
                        "src": "8541:5:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "8524:23:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2344,
                  "nodeType": "ExpressionStatement",
                  "src": "8517:30:9"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2346,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2289,
                        "src": "8582:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 2345,
                      "name": "WhitelistedRemoved",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1934,
                      "src": "8563:18:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 2347,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8563:27:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2348,
                  "nodeType": "EmitStatement",
                  "src": "8558:32:9"
                }
              ]
            },
            "documentation": null,
            "id": 2350,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_removeWhitelisted",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2290,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2289,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 2350,
                  "src": "8111:15:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2288,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8111:7:9",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8110:17:9"
            },
            "returnParameters": {
              "id": 2291,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8137:0:9"
            },
            "scope": 2380,
            "src": "8083:514:9",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2362,
              "nodeType": "Block",
              "src": "8876:46:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2359,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2352,
                        "src": "8907:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 2357,
                        "name": "blacklist",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1889,
                        "src": "8893:9:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$20654_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 2358,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "has",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 20740,
                      "src": "8893:13:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_Role_$20654_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_Role_$20654_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address) view returns (bool)"
                      }
                    },
                    "id": 2360,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8893:22:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 2356,
                  "id": 2361,
                  "nodeType": "Return",
                  "src": "8886:29:9"
                }
              ]
            },
            "documentation": null,
            "id": 2363,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isBlacklisted",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2353,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2352,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 2363,
                  "src": "8832:15:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2351,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8832:7:9",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8831:17:9"
            },
            "returnParameters": {
              "id": 2356,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2355,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2363,
                  "src": "8870:4:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 2354,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "8870:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8869:6:9"
            },
            "scope": 2380,
            "src": "8809:113:9",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 2378,
              "nodeType": "Block",
              "src": "9104:128:9",
              "statements": [
                {
                  "assignments": [
                    2371
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2371,
                      "name": "length",
                      "nodeType": "VariableDeclaration",
                      "scope": 2378,
                      "src": "9114:14:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2370,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "9114:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2372,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "9114:14:9"
                },
                {
                  "externalReferences": [
                    {
                      "length": {
                        "declaration": 2371,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "9161:6:9",
                        "valueSize": 1
                      }
                    },
                    {
                      "_addr": {
                        "declaration": 2365,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "9183:5:9",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 2373,
                  "nodeType": "InlineAssembly",
                  "operations": "{ length := extcodesize(_addr) }",
                  "src": "9138:61:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2376,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 2374,
                      "name": "length",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2371,
                      "src": "9215:6:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 2375,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "9224:1:9",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "9215:10:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 2369,
                  "id": 2377,
                  "nodeType": "Return",
                  "src": "9208:17:9"
                }
              ]
            },
            "documentation": null,
            "id": 2379,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isContract",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2366,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2365,
                  "name": "_addr",
                  "nodeType": "VariableDeclaration",
                  "scope": 2379,
                  "src": "9060:13:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2364,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "9060:7:9",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9059:15:9"
            },
            "returnParameters": {
              "id": 2369,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2368,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2379,
                  "src": "9098:4:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 2367,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "9098:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9097:6:9"
            },
            "scope": 2380,
            "src": "9040:192:9",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "internal"
          }
        ],
        "scope": 2381,
        "src": "456:8778:9"
      }
    ],
    "src": "0:9235:9"
  },
  "legacyAST": {
    "absolutePath": "/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/identity/Identity.sol",
    "exportedSymbols": {
      "Identity": [
        2380
      ]
    },
    "id": 2381,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 1869,
        "literals": [
          "solidity",
          ">",
          "0.5",
          ".4"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:9"
      },
      {
        "absolutePath": "openzeppelin-solidity/contracts/access/Roles.sol",
        "file": "openzeppelin-solidity/contracts/access/Roles.sol",
        "id": 1870,
        "nodeType": "ImportDirective",
        "scope": 2381,
        "sourceUnit": 20742,
        "src": "25:58:9",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "openzeppelin-solidity/contracts/math/SafeMath.sol",
        "file": "openzeppelin-solidity/contracts/math/SafeMath.sol",
        "id": 1871,
        "nodeType": "ImportDirective",
        "scope": 2381,
        "sourceUnit": 21309,
        "src": "84:59:9",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "openzeppelin-solidity/contracts/lifecycle/Pausable.sol",
        "file": "openzeppelin-solidity/contracts/lifecycle/Pausable.sol",
        "id": 1872,
        "nodeType": "ImportDirective",
        "scope": 2381,
        "sourceUnit": 21112,
        "src": "144:64:9",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@daostack/arc/contracts/controller/Avatar.sol",
        "file": "@daostack/arc/contracts/controller/Avatar.sol",
        "id": 1873,
        "nodeType": "ImportDirective",
        "scope": 2381,
        "sourceUnit": 12706,
        "src": "210:55:9",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/dao/schemes/SchemeGuard.sol",
        "file": "../dao/schemes/SchemeGuard.sol",
        "id": 1874,
        "nodeType": "ImportDirective",
        "scope": 2381,
        "sourceUnit": 1424,
        "src": "267:40:9",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/identity/IdentityAdminRole.sol",
        "file": "./IdentityAdminRole.sol",
        "id": 1875,
        "nodeType": "ImportDirective",
        "scope": 2381,
        "sourceUnit": 2508,
        "src": "308:33:9",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 1876,
              "name": "IdentityAdminRole",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 2507,
              "src": "477:17:9",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IdentityAdminRole_$2507",
                "typeString": "contract IdentityAdminRole"
              }
            },
            "id": 1877,
            "nodeType": "InheritanceSpecifier",
            "src": "477:17:9"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 1878,
              "name": "SchemeGuard",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 1423,
              "src": "496:11:9",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_SchemeGuard_$1423",
                "typeString": "contract SchemeGuard"
              }
            },
            "id": 1879,
            "nodeType": "InheritanceSpecifier",
            "src": "496:11:9"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 1880,
              "name": "Pausable",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 21111,
              "src": "509:8:9",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Pausable_$21111",
                "typeString": "contract Pausable"
              }
            },
            "id": 1881,
            "nodeType": "InheritanceSpecifier",
            "src": "509:8:9"
          }
        ],
        "contractDependencies": [
          1423,
          2507,
          20947,
          21111,
          21417
        ],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 2380,
        "linearizedBaseContracts": [
          2380,
          21111,
          20947,
          1423,
          2507,
          21417
        ],
        "name": "Identity",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 1884,
            "libraryName": {
              "contractScope": null,
              "id": 1882,
              "name": "Roles",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 20741,
              "src": "530:5:9",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Roles_$20741",
                "typeString": "library Roles"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "524:27:9",
            "typeName": {
              "contractScope": null,
              "id": 1883,
              "name": "Roles.Role",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 20654,
              "src": "540:10:9",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_Role_$20654_storage_ptr",
                "typeString": "struct Roles.Role"
              }
            }
          },
          {
            "id": 1887,
            "libraryName": {
              "contractScope": null,
              "id": 1885,
              "name": "SafeMath",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 21308,
              "src": "562:8:9",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_SafeMath_$21308",
                "typeString": "library SafeMath"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "556:27:9",
            "typeName": {
              "id": 1886,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "575:7:9",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            }
          },
          {
            "constant": false,
            "id": 1889,
            "name": "blacklist",
            "nodeType": "VariableDeclaration",
            "scope": 2380,
            "src": "589:28:9",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_struct$_Role_$20654_storage",
              "typeString": "struct Roles.Role"
            },
            "typeName": {
              "contractScope": null,
              "id": 1888,
              "name": "Roles.Role",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 20654,
              "src": "589:10:9",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_Role_$20654_storage_ptr",
                "typeString": "struct Roles.Role"
              }
            },
            "value": null,
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 1891,
            "name": "whitelist",
            "nodeType": "VariableDeclaration",
            "scope": 2380,
            "src": "623:28:9",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_struct$_Role_$20654_storage",
              "typeString": "struct Roles.Role"
            },
            "typeName": {
              "contractScope": null,
              "id": 1890,
              "name": "Roles.Role",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 20654,
              "src": "623:10:9",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_Role_$20654_storage_ptr",
                "typeString": "struct Roles.Role"
              }
            },
            "value": null,
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 1893,
            "name": "contracts",
            "nodeType": "VariableDeclaration",
            "scope": 2380,
            "src": "657:28:9",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_struct$_Role_$20654_storage",
              "typeString": "struct Roles.Role"
            },
            "typeName": {
              "contractScope": null,
              "id": 1892,
              "name": "Roles.Role",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 20654,
              "src": "657:10:9",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_Role_$20654_storage_ptr",
                "typeString": "struct Roles.Role"
              }
            },
            "value": null,
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 1896,
            "name": "whitelistedCount",
            "nodeType": "VariableDeclaration",
            "scope": 2380,
            "src": "692:35:9",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 1894,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "692:7:9",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "30",
              "id": 1895,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "726:1:9",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_0_by_1",
                "typeString": "int_const 0"
              },
              "value": "0"
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 1899,
            "name": "whitelistedContracts",
            "nodeType": "VariableDeclaration",
            "scope": 2380,
            "src": "733:39:9",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 1897,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "733:7:9",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "30",
              "id": 1898,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "771:1:9",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_0_by_1",
                "typeString": "int_const 0"
              },
              "value": "0"
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 1902,
            "name": "authenticationPeriod",
            "nodeType": "VariableDeclaration",
            "scope": 2380,
            "src": "778:40:9",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 1900,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "778:7:9",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "3134",
              "id": 1901,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "816:2:9",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_14_by_1",
                "typeString": "int_const 14"
              },
              "value": "14"
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 1906,
            "name": "dateAuthenticated",
            "nodeType": "VariableDeclaration",
            "scope": 2380,
            "src": "825:52:9",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
              "typeString": "mapping(address => uint256)"
            },
            "typeName": {
              "id": 1905,
              "keyType": {
                "id": 1903,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "833:7:9",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "825:27:9",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                "typeString": "mapping(address => uint256)"
              },
              "valueType": {
                "id": 1904,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "844:7:9",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 1910,
            "name": "dateAdded",
            "nodeType": "VariableDeclaration",
            "scope": 2380,
            "src": "883:44:9",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
              "typeString": "mapping(address => uint256)"
            },
            "typeName": {
              "id": 1909,
              "keyType": {
                "id": 1907,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "891:7:9",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "883:27:9",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                "typeString": "mapping(address => uint256)"
              },
              "valueType": {
                "id": 1908,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "902:7:9",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 1914,
            "name": "addrToDID",
            "nodeType": "VariableDeclaration",
            "scope": 2380,
            "src": "934:43:9",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_string_storage_$",
              "typeString": "mapping(address => string)"
            },
            "typeName": {
              "id": 1913,
              "keyType": {
                "id": 1911,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "942:7:9",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "934:26:9",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_string_storage_$",
                "typeString": "mapping(address => string)"
              },
              "valueType": {
                "id": 1912,
                "name": "string",
                "nodeType": "ElementaryTypeName",
                "src": "953:6:9",
                "typeDescriptions": {
                  "typeIdentifier": "t_string_storage_ptr",
                  "typeString": "string"
                }
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 1918,
            "name": "didHashToAddress",
            "nodeType": "VariableDeclaration",
            "scope": 2380,
            "src": "983:51:9",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
              "typeString": "mapping(bytes32 => address)"
            },
            "typeName": {
              "id": 1917,
              "keyType": {
                "id": 1915,
                "name": "bytes32",
                "nodeType": "ElementaryTypeName",
                "src": "991:7:9",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                }
              },
              "nodeType": "Mapping",
              "src": "983:27:9",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
                "typeString": "mapping(bytes32 => address)"
              },
              "valueType": {
                "id": 1916,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "1002:7:9",
                "stateMutability": "nonpayable",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 1922,
            "name": "BlacklistAdded",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 1921,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1920,
                  "indexed": true,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 1922,
                  "src": "1062:23:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1919,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1062:7:9",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1061:25:9"
            },
            "src": "1041:46:9"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 1926,
            "name": "BlacklistRemoved",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 1925,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1924,
                  "indexed": true,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 1926,
                  "src": "1115:23:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1923,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1115:7:9",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1114:25:9"
            },
            "src": "1092:48:9"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 1930,
            "name": "WhitelistedAdded",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 1929,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1928,
                  "indexed": true,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 1930,
                  "src": "1169:23:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1927,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1169:7:9",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1168:25:9"
            },
            "src": "1146:48:9"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 1934,
            "name": "WhitelistedRemoved",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 1933,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1932,
                  "indexed": true,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 1934,
                  "src": "1224:23:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1931,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1224:7:9",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1223:25:9"
            },
            "src": "1199:50:9"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 1938,
            "name": "ContractAdded",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 1937,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1936,
                  "indexed": true,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 1938,
                  "src": "1275:23:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1935,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1275:7:9",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1274:25:9"
            },
            "src": "1255:45:9"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 1942,
            "name": "ContractRemoved",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 1941,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1940,
                  "indexed": true,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 1942,
                  "src": "1327:23:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1939,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1327:7:9",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1326:25:9"
            },
            "src": "1305:47:9"
          },
          {
            "body": {
              "id": 1950,
              "nodeType": "Block",
              "src": "1402:2:9",
              "statements": []
            },
            "documentation": null,
            "id": 1951,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 1946,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1398:1:9",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        }
                      ],
                      "id": 1945,
                      "name": "Avatar",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12705,
                      "src": "1391:6:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_Avatar_$12705_$",
                        "typeString": "type(contract Avatar)"
                      }
                    },
                    "id": 1947,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1391:9:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Avatar_$12705",
                      "typeString": "contract Avatar"
                    }
                  }
                ],
                "id": 1948,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1944,
                  "name": "SchemeGuard",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1423,
                  "src": "1379:11:9",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_SchemeGuard_$1423_$",
                    "typeString": "type(contract SchemeGuard)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1379:22:9"
              }
            ],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1943,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1369:2:9"
            },
            "returnParameters": {
              "id": 1949,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1402:0:9"
            },
            "scope": 2380,
            "src": "1358:46:9",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1964,
              "nodeType": "Block",
              "src": "1663:46:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1962,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1960,
                      "name": "authenticationPeriod",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1902,
                      "src": "1673:20:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 1961,
                      "name": "period",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1953,
                      "src": "1696:6:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "1673:29:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1963,
                  "nodeType": "ExpressionStatement",
                  "src": "1673:29:9"
                }
              ]
            },
            "documentation": null,
            "id": 1965,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 1956,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1955,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 21351,
                  "src": "1639:9:9",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1639:9:9"
              },
              {
                "arguments": null,
                "id": 1958,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1957,
                  "name": "whenNotPaused",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 21068,
                  "src": "1649:13:9",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1649:13:9"
              }
            ],
            "name": "setAuthenticationPeriod",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1954,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1953,
                  "name": "period",
                  "nodeType": "VariableDeclaration",
                  "scope": 1965,
                  "src": "1616:14:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1952,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1616:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1615:16:9"
            },
            "returnParameters": {
              "id": 1959,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1663:0:9"
            },
            "scope": 2380,
            "src": "1583:126:9",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1982,
              "nodeType": "Block",
              "src": "2042:49:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1980,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 1976,
                        "name": "dateAuthenticated",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1906,
                        "src": "2052:17:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 1978,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 1977,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1967,
                        "src": "2070:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "2052:26:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 1979,
                      "name": "now",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 22173,
                      "src": "2081:3:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2052:32:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1981,
                  "nodeType": "ExpressionStatement",
                  "src": "2052:32:9"
                }
              ]
            },
            "documentation": null,
            "id": 1983,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 1970,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1969,
                  "name": "onlyRegistered",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1335,
                  "src": "1975:14:9",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1975:14:9"
              },
              {
                "arguments": null,
                "id": 1972,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1971,
                  "name": "onlyIdentityAdmin",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 2420,
                  "src": "1998:17:9",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1998:17:9"
              },
              {
                "arguments": null,
                "id": 1974,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1973,
                  "name": "whenNotPaused",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 21068,
                  "src": "2024:13:9",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2024:13:9"
              }
            ],
            "name": "authenticate",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1968,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1967,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 1983,
                  "src": "1935:15:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1966,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1935:7:9",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1934:17:9"
            },
            "returnParameters": {
              "id": 1975,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2042:0:9"
            },
            "scope": 2380,
            "src": "1913:178:9",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1998,
              "nodeType": "Block",
              "src": "2386:41:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1995,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1985,
                        "src": "2412:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 1994,
                      "name": "_addWhitelisted",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2244,
                      "src": "2396:15:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 1996,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2396:24:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1997,
                  "nodeType": "ExpressionStatement",
                  "src": "2396:24:9"
                }
              ]
            },
            "documentation": null,
            "id": 1999,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 1988,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1987,
                  "name": "onlyRegistered",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1335,
                  "src": "2319:14:9",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2319:14:9"
              },
              {
                "arguments": null,
                "id": 1990,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1989,
                  "name": "onlyIdentityAdmin",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 2420,
                  "src": "2342:17:9",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2342:17:9"
              },
              {
                "arguments": null,
                "id": 1992,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1991,
                  "name": "whenNotPaused",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 21068,
                  "src": "2368:13:9",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2368:13:9"
              }
            ],
            "name": "addWhitelisted",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1986,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1985,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 1999,
                  "src": "2279:15:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1984,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2279:7:9",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2278:17:9"
            },
            "returnParameters": {
              "id": 1993,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2386:0:9"
            },
            "scope": 2380,
            "src": "2255:172:9",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 2017,
              "nodeType": "Block",
              "src": "2748:53:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2013,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2001,
                        "src": "2781:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2014,
                        "name": "did",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2003,
                        "src": "2790:3:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 2012,
                      "name": "_addWhitelistedWithDID",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2287,
                      "src": "2758:22:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (address,string memory)"
                      }
                    },
                    "id": 2015,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2758:36:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2016,
                  "nodeType": "ExpressionStatement",
                  "src": "2758:36:9"
                }
              ]
            },
            "documentation": null,
            "id": 2018,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 2006,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 2005,
                  "name": "onlyRegistered",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1335,
                  "src": "2681:14:9",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2681:14:9"
              },
              {
                "arguments": null,
                "id": 2008,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 2007,
                  "name": "onlyIdentityAdmin",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 2420,
                  "src": "2704:17:9",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2704:17:9"
              },
              {
                "arguments": null,
                "id": 2010,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 2009,
                  "name": "whenNotPaused",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 21068,
                  "src": "2730:13:9",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2730:13:9"
              }
            ],
            "name": "addWhitelistedWithDID",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2004,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2001,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 2018,
                  "src": "2622:15:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2000,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2622:7:9",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2003,
                  "name": "did",
                  "nodeType": "VariableDeclaration",
                  "scope": 2018,
                  "src": "2639:17:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 2002,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "2639:6:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2621:36:9"
            },
            "returnParameters": {
              "id": 2011,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2748:0:9"
            },
            "scope": 2380,
            "src": "2591:210:9",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 2033,
              "nodeType": "Block",
              "src": "3105:44:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2030,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2020,
                        "src": "3134:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 2029,
                      "name": "_removeWhitelisted",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2350,
                      "src": "3115:18:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 2031,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3115:27:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2032,
                  "nodeType": "ExpressionStatement",
                  "src": "3115:27:9"
                }
              ]
            },
            "documentation": null,
            "id": 2034,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 2023,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 2022,
                  "name": "onlyRegistered",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1335,
                  "src": "3038:14:9",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "3038:14:9"
              },
              {
                "arguments": null,
                "id": 2025,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 2024,
                  "name": "onlyIdentityAdmin",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 2420,
                  "src": "3061:17:9",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "3061:17:9"
              },
              {
                "arguments": null,
                "id": 2027,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 2026,
                  "name": "whenNotPaused",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 21068,
                  "src": "3087:13:9",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "3087:13:9"
              }
            ],
            "name": "removeWhitelisted",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2021,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2020,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 2034,
                  "src": "2998:15:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2019,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2998:7:9",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2997:17:9"
            },
            "returnParameters": {
              "id": 2028,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3105:0:9"
            },
            "scope": 2380,
            "src": "2971:178:9",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 2044,
              "nodeType": "Block",
              "src": "3269:47:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2040,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 22171,
                          "src": "3298:3:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 2041,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "3298:10:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 2039,
                      "name": "_removeWhitelisted",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2350,
                      "src": "3279:18:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 2042,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3279:30:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2043,
                  "nodeType": "ExpressionStatement",
                  "src": "3279:30:9"
                }
              ]
            },
            "documentation": null,
            "id": 2045,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 2037,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 2036,
                  "name": "whenNotPaused",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 21068,
                  "src": "3255:13:9",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "3255:13:9"
              }
            ],
            "name": "renounceWhitelisted",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2035,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3245:2:9"
            },
            "returnParameters": {
              "id": 2038,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3269:0:9"
            },
            "scope": 2380,
            "src": "3217:99:9",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 2074,
              "nodeType": "Block",
              "src": "3587:201:9",
              "statements": [
                {
                  "assignments": [
                    2053
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2053,
                      "name": "daysSinceAuthentication",
                      "nodeType": "VariableDeclaration",
                      "scope": 2074,
                      "src": "3597:31:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2052,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "3597:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2063,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2062,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 2056,
                                "name": "dateAuthenticated",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1906,
                                "src": "3640:17:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                  "typeString": "mapping(address => uint256)"
                                }
                              },
                              "id": 2058,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 2057,
                                "name": "account",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2047,
                                "src": "3658:7:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "3640:26:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 2054,
                              "name": "now",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 22173,
                              "src": "3632:3:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 2055,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sub",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 21263,
                            "src": "3632:7:9",
                            "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": 2059,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3632:35:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "id": 2060,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "3631:37:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "/",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "31",
                      "id": 2061,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3671:6:9",
                      "subdenomination": "days",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_86400_by_1",
                        "typeString": "int_const 86400"
                      },
                      "value": "1"
                    },
                    "src": "3631:46:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3597:80:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 2072,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 2066,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 2064,
                            "name": "daysSinceAuthentication",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2053,
                            "src": "3707:23:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 2065,
                            "name": "authenticationPeriod",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1902,
                            "src": "3734:20:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "3707:47:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        }
                      ],
                      "id": 2067,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "3706:49:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 2070,
                          "name": "account",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2047,
                          "src": "3773:7:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 2068,
                          "name": "whitelist",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1891,
                          "src": "3759:9:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Role_$20654_storage",
                            "typeString": "struct Roles.Role storage ref"
                          }
                        },
                        "id": 2069,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "has",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 20740,
                        "src": "3759:13:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_struct$_Role_$20654_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_Role_$20654_storage_ptr_$",
                          "typeString": "function (struct Roles.Role storage pointer,address) view returns (bool)"
                        }
                      },
                      "id": 2071,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "3759:22:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "3706:75:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 2051,
                  "id": 2073,
                  "nodeType": "Return",
                  "src": "3687:94:9"
                }
              ]
            },
            "documentation": null,
            "id": 2075,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isWhitelisted",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2048,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2047,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 2075,
                  "src": "3543:15:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2046,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3543:7:9",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3542:17:9"
            },
            "returnParameters": {
              "id": 2051,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2050,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2075,
                  "src": "3581:4:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 2049,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "3581:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3580:6:9"
            },
            "scope": 2380,
            "src": "3520:268:9",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 2086,
              "nodeType": "Block",
              "src": "4031:50:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 2082,
                      "name": "dateAuthenticated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1906,
                      "src": "4048:17:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                        "typeString": "mapping(address => uint256)"
                      }
                    },
                    "id": 2084,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 2083,
                      "name": "account",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2077,
                      "src": "4066:7:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "4048:26:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 2081,
                  "id": 2085,
                  "nodeType": "Return",
                  "src": "4041:33:9"
                }
              ]
            },
            "documentation": null,
            "id": 2087,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "lastAuthenticated",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2078,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2077,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 2087,
                  "src": "3984:15:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2076,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3984:7:9",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3983:17:9"
            },
            "returnParameters": {
              "id": 2081,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2080,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2087,
                  "src": "4022:7:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2079,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4022:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4021:9:9"
            },
            "scope": 2380,
            "src": "3957:124:9",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 2108,
              "nodeType": "Block",
              "src": "5497:77:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2101,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2089,
                        "src": "5521:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 2098,
                        "name": "blacklist",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1889,
                        "src": "5507:9:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$20654_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 2100,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "add",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 20686,
                      "src": "5507:13:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$20654_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$20654_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address)"
                      }
                    },
                    "id": 2102,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5507:22:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2103,
                  "nodeType": "ExpressionStatement",
                  "src": "5507:22:9"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2105,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2089,
                        "src": "5559:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 2104,
                      "name": "BlacklistAdded",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1922,
                      "src": "5544:14:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 2106,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5544:23:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2107,
                  "nodeType": "EmitStatement",
                  "src": "5539:28:9"
                }
              ]
            },
            "documentation": null,
            "id": 2109,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 2092,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 2091,
                  "name": "onlyRegistered",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1335,
                  "src": "5430:14:9",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5430:14:9"
              },
              {
                "arguments": null,
                "id": 2094,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 2093,
                  "name": "onlyIdentityAdmin",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 2420,
                  "src": "5453:17:9",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5453:17:9"
              },
              {
                "arguments": null,
                "id": 2096,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 2095,
                  "name": "whenNotPaused",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 21068,
                  "src": "5479:13:9",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5479:13:9"
              }
            ],
            "name": "addBlacklisted",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2090,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2089,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 2109,
                  "src": "5390:15:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2088,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5390:7:9",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5389:17:9"
            },
            "returnParameters": {
              "id": 2097,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5497:0:9"
            },
            "scope": 2380,
            "src": "5366:208:9",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 2130,
              "nodeType": "Block",
              "src": "5877:82:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2123,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2111,
                        "src": "5904:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 2120,
                        "name": "blacklist",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1889,
                        "src": "5887:9:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$20654_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 2122,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "remove",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 20717,
                      "src": "5887:16:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$20654_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$20654_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address)"
                      }
                    },
                    "id": 2124,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5887:25:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2125,
                  "nodeType": "ExpressionStatement",
                  "src": "5887:25:9"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2127,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2111,
                        "src": "5944:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 2126,
                      "name": "BlacklistRemoved",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1926,
                      "src": "5927:16:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 2128,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5927:25:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2129,
                  "nodeType": "EmitStatement",
                  "src": "5922:30:9"
                }
              ]
            },
            "documentation": null,
            "id": 2131,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 2114,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 2113,
                  "name": "onlyRegistered",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1335,
                  "src": "5810:14:9",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5810:14:9"
              },
              {
                "arguments": null,
                "id": 2116,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 2115,
                  "name": "onlyIdentityAdmin",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 2420,
                  "src": "5833:17:9",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5833:17:9"
              },
              {
                "arguments": null,
                "id": 2118,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 2117,
                  "name": "whenNotPaused",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 21068,
                  "src": "5859:13:9",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5859:13:9"
              }
            ],
            "name": "removeBlacklisted",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2112,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2111,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 2131,
                  "src": "5770:15:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2110,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5770:7:9",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5769:17:9"
            },
            "returnParameters": {
              "id": 2119,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5877:0:9"
            },
            "scope": 2380,
            "src": "5743:216:9",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 2163,
              "nodeType": "Block",
              "src": "6202:184:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 2144,
                            "name": "account",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2133,
                            "src": "6231:7:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 2143,
                          "name": "isContract",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2379,
                          "src": "6220:10:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                            "typeString": "function (address) view returns (bool)"
                          }
                        },
                        "id": 2145,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "6220:19:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "476976656e2061646472657373206973206e6f74206120636f6e7472616374",
                        "id": 2146,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "6241:33:9",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_c016cb8d50f495ff112d56868bcdc02233dd830483c688e57c25753f3ef679bb",
                          "typeString": "literal_string \"Given address is not a contract\""
                        },
                        "value": "Given address is not a contract"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_c016cb8d50f495ff112d56868bcdc02233dd830483c688e57c25753f3ef679bb",
                          "typeString": "literal_string \"Given address is not a contract\""
                        }
                      ],
                      "id": 2142,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        22174,
                        22175
                      ],
                      "referencedDeclaration": 22175,
                      "src": "6212:7:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 2147,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6212:63:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2148,
                  "nodeType": "ExpressionStatement",
                  "src": "6212:63:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2152,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2133,
                        "src": "6299:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 2149,
                        "name": "contracts",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1893,
                        "src": "6285:9:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$20654_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 2151,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "add",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 20686,
                      "src": "6285:13:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$20654_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$20654_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address)"
                      }
                    },
                    "id": 2153,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6285:22:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2154,
                  "nodeType": "ExpressionStatement",
                  "src": "6285:22:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2156,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2133,
                        "src": "6333:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 2155,
                      "name": "_addWhitelisted",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2244,
                      "src": "6317:15:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 2157,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6317:24:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2158,
                  "nodeType": "ExpressionStatement",
                  "src": "6317:24:9"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2160,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2133,
                        "src": "6371:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 2159,
                      "name": "ContractAdded",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1938,
                      "src": "6357:13:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 2161,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6357:22:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2162,
                  "nodeType": "EmitStatement",
                  "src": "6352:27:9"
                }
              ]
            },
            "documentation": null,
            "id": 2164,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 2136,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 2135,
                  "name": "onlyRegistered",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1335,
                  "src": "6135:14:9",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6135:14:9"
              },
              {
                "arguments": null,
                "id": 2138,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 2137,
                  "name": "onlyIdentityAdmin",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 2420,
                  "src": "6158:17:9",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6158:17:9"
              },
              {
                "arguments": null,
                "id": 2140,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 2139,
                  "name": "whenNotPaused",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 21068,
                  "src": "6184:13:9",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6184:13:9"
              }
            ],
            "name": "addContract",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2134,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2133,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 2164,
                  "src": "6095:15:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2132,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6095:7:9",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6094:17:9"
            },
            "returnParameters": {
              "id": 2141,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6202:0:9"
            },
            "scope": 2380,
            "src": "6074:312:9",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 2189,
              "nodeType": "Block",
              "src": "6637:119:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2178,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2166,
                        "src": "6664:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 2175,
                        "name": "contracts",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1893,
                        "src": "6647:9:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$20654_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 2177,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "remove",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 20717,
                      "src": "6647:16:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$20654_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$20654_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address)"
                      }
                    },
                    "id": 2179,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6647:25:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2180,
                  "nodeType": "ExpressionStatement",
                  "src": "6647:25:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2182,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2166,
                        "src": "6701:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 2181,
                      "name": "_removeWhitelisted",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2350,
                      "src": "6682:18:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 2183,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6682:27:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2184,
                  "nodeType": "ExpressionStatement",
                  "src": "6682:27:9"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2186,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2166,
                        "src": "6741:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 2185,
                      "name": "ContractRemoved",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1942,
                      "src": "6725:15:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 2187,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6725:24:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2188,
                  "nodeType": "EmitStatement",
                  "src": "6720:29:9"
                }
              ]
            },
            "documentation": null,
            "id": 2190,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 2169,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 2168,
                  "name": "onlyRegistered",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1335,
                  "src": "6570:14:9",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6570:14:9"
              },
              {
                "arguments": null,
                "id": 2171,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 2170,
                  "name": "onlyIdentityAdmin",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 2420,
                  "src": "6593:17:9",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6593:17:9"
              },
              {
                "arguments": null,
                "id": 2173,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 2172,
                  "name": "whenNotPaused",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 21068,
                  "src": "6619:13:9",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6619:13:9"
              }
            ],
            "name": "removeContract",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2167,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2166,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 2190,
                  "src": "6530:15:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2165,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6530:7:9",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6529:17:9"
            },
            "returnParameters": {
              "id": 2174,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6637:0:9"
            },
            "scope": 2380,
            "src": "6506:250:9",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 2202,
              "nodeType": "Block",
              "src": "7009:46:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2199,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2192,
                        "src": "7040:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 2197,
                        "name": "contracts",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1893,
                        "src": "7026:9:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$20654_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 2198,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "has",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 20740,
                      "src": "7026:13:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_Role_$20654_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_Role_$20654_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address) view returns (bool)"
                      }
                    },
                    "id": 2200,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7026:22:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 2196,
                  "id": 2201,
                  "nodeType": "Return",
                  "src": "7019:29:9"
                }
              ]
            },
            "documentation": null,
            "id": 2203,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isDAOContract",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2193,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2192,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 2203,
                  "src": "6965:15:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2191,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6965:7:9",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6964:17:9"
            },
            "returnParameters": {
              "id": 2196,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2195,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2203,
                  "src": "7003:4:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 2194,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "7003:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7002:6:9"
            },
            "scope": 2380,
            "src": "6942:113:9",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 2243,
              "nodeType": "Block",
              "src": "7213:273:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2211,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2205,
                        "src": "7237:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 2208,
                        "name": "whitelist",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1891,
                        "src": "7223:9:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$20654_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 2210,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "add",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 20686,
                      "src": "7223:13:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$20654_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$20654_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address)"
                      }
                    },
                    "id": 2212,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7223:22:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2213,
                  "nodeType": "ExpressionStatement",
                  "src": "7223:22:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2216,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 2214,
                      "name": "whitelistedCount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1896,
                      "src": "7256:16:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "+=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "31",
                      "id": 2215,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "7276:1:9",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "src": "7256:21:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 2217,
                  "nodeType": "ExpressionStatement",
                  "src": "7256:21:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2222,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 2218,
                        "name": "dateAdded",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1910,
                        "src": "7287:9:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 2220,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 2219,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2205,
                        "src": "7297:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "7287:18:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 2221,
                      "name": "now",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 22173,
                      "src": "7308:3:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "7287:24:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 2223,
                  "nodeType": "ExpressionStatement",
                  "src": "7287:24:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2228,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 2224,
                        "name": "dateAuthenticated",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1906,
                        "src": "7321:17:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 2226,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 2225,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2205,
                        "src": "7339:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "7321:26:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 2227,
                      "name": "now",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 22173,
                      "src": "7350:3:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "7321:32:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 2229,
                  "nodeType": "ExpressionStatement",
                  "src": "7321:32:9"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2231,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2205,
                        "src": "7379:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 2230,
                      "name": "isContract",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2379,
                      "src": "7368:10:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                        "typeString": "function (address) view returns (bool)"
                      }
                    },
                    "id": 2232,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7368:19:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 2238,
                  "nodeType": "IfStatement",
                  "src": "7364:75:9",
                  "trueBody": {
                    "id": 2237,
                    "nodeType": "Block",
                    "src": "7389:50:9",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 2235,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 2233,
                            "name": "whitelistedContracts",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1899,
                            "src": "7403:20:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "31",
                            "id": 2234,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "7427:1:9",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "src": "7403:25:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 2236,
                        "nodeType": "ExpressionStatement",
                        "src": "7403:25:9"
                      }
                    ]
                  }
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2240,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2205,
                        "src": "7471:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 2239,
                      "name": "WhitelistedAdded",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1930,
                      "src": "7454:16:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 2241,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7454:25:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2242,
                  "nodeType": "EmitStatement",
                  "src": "7449:30:9"
                }
              ]
            },
            "documentation": null,
            "id": 2244,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_addWhitelisted",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2206,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2205,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 2244,
                  "src": "7187:15:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2204,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7187:7:9",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7186:17:9"
            },
            "returnParameters": {
              "id": 2207,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7213:0:9"
            },
            "scope": 2380,
            "src": "7162:324:9",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2286,
              "nodeType": "Block",
              "src": "7722:249:9",
              "statements": [
                {
                  "assignments": [
                    2252
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2252,
                      "name": "pHash",
                      "nodeType": "VariableDeclaration",
                      "scope": 2286,
                      "src": "7732:13:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 2251,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "7732:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2258,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 2255,
                            "name": "did",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2248,
                            "src": "7764:3:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          ],
                          "id": 2254,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "7758:5:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                            "typeString": "type(bytes storage pointer)"
                          },
                          "typeName": "bytes"
                        },
                        "id": 2256,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7758:10:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 2253,
                      "name": "keccak256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 22165,
                      "src": "7748:9:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (bytes memory) pure returns (bytes32)"
                      }
                    },
                    "id": 2257,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7748:21:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7732:37:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 2266,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 2260,
                            "name": "didHashToAddress",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1918,
                            "src": "7787:16:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
                              "typeString": "mapping(bytes32 => address)"
                            }
                          },
                          "id": 2262,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 2261,
                            "name": "pHash",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2252,
                            "src": "7804:5:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "7787:23:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 2264,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "7822:1:9",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 2263,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "7814:7:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 2265,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7814:10:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "7787:37:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "44494420616c72656164792072656769737465726564",
                        "id": 2267,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7826:24:9",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_761cab18940f21d9559eeced38da846400e6144eb9c0e8f0f4c044714a4f97c4",
                          "typeString": "literal_string \"DID already registered\""
                        },
                        "value": "DID already registered"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_761cab18940f21d9559eeced38da846400e6144eb9c0e8f0f4c044714a4f97c4",
                          "typeString": "literal_string \"DID already registered\""
                        }
                      ],
                      "id": 2259,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        22174,
                        22175
                      ],
                      "referencedDeclaration": 22175,
                      "src": "7779:7:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 2268,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7779:72:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2269,
                  "nodeType": "ExpressionStatement",
                  "src": "7779:72:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2274,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 2270,
                        "name": "addrToDID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1914,
                        "src": "7862:9:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_string_storage_$",
                          "typeString": "mapping(address => string storage ref)"
                        }
                      },
                      "id": 2272,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 2271,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2246,
                        "src": "7872:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "7862:18:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_storage",
                        "typeString": "string storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 2273,
                      "name": "did",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2248,
                      "src": "7883:3:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string memory"
                      }
                    },
                    "src": "7862:24:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage",
                      "typeString": "string storage ref"
                    }
                  },
                  "id": 2275,
                  "nodeType": "ExpressionStatement",
                  "src": "7862:24:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2280,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 2276,
                        "name": "didHashToAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1918,
                        "src": "7896:16:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
                          "typeString": "mapping(bytes32 => address)"
                        }
                      },
                      "id": 2278,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 2277,
                        "name": "pHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2252,
                        "src": "7913:5:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "7896:23:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 2279,
                      "name": "account",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2246,
                      "src": "7922:7:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "7896:33:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 2281,
                  "nodeType": "ExpressionStatement",
                  "src": "7896:33:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2283,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2246,
                        "src": "7956:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 2282,
                      "name": "_addWhitelisted",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2244,
                      "src": "7940:15:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 2284,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7940:24:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2285,
                  "nodeType": "ExpressionStatement",
                  "src": "7940:24:9"
                }
              ]
            },
            "documentation": null,
            "id": 2287,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_addWhitelistedWithDID",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2249,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2246,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 2287,
                  "src": "7677:15:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2245,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7677:7:9",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2248,
                  "name": "did",
                  "nodeType": "VariableDeclaration",
                  "scope": 2287,
                  "src": "7694:17:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 2247,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "7694:6:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7676:36:9"
            },
            "returnParameters": {
              "id": 2250,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7722:0:9"
            },
            "scope": 2380,
            "src": "7645:326:9",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2349,
              "nodeType": "Block",
              "src": "8137:460:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2295,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2289,
                        "src": "8164:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 2292,
                        "name": "whitelist",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1891,
                        "src": "8147:9:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$20654_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 2294,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "remove",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 20717,
                      "src": "8147:16:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$20654_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$20654_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address)"
                      }
                    },
                    "id": 2296,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8147:25:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2297,
                  "nodeType": "ExpressionStatement",
                  "src": "8147:25:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2300,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 2298,
                      "name": "whitelistedCount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1896,
                      "src": "8183:16:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "-=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "31",
                      "id": 2299,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "8203:1:9",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "src": "8183:21:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 2301,
                  "nodeType": "ExpressionStatement",
                  "src": "8183:21:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2305,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "delete",
                    "prefix": true,
                    "src": "8214:33:9",
                    "subExpression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 2302,
                        "name": "dateAuthenticated",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1906,
                        "src": "8221:17:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 2304,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 2303,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2289,
                        "src": "8239:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "8221:26:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2306,
                  "nodeType": "ExpressionStatement",
                  "src": "8214:33:9"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2308,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2289,
                        "src": "8273:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 2307,
                      "name": "isContract",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2379,
                      "src": "8262:10:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                        "typeString": "function (address) view returns (bool)"
                      }
                    },
                    "id": 2309,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8262:19:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 2315,
                  "nodeType": "IfStatement",
                  "src": "8258:75:9",
                  "trueBody": {
                    "id": 2314,
                    "nodeType": "Block",
                    "src": "8283:50:9",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 2312,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 2310,
                            "name": "whitelistedContracts",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1899,
                            "src": "8297:20:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "-=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "31",
                            "id": 2311,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "8321:1:9",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "src": "8297:25:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 2313,
                        "nodeType": "ExpressionStatement",
                        "src": "8297:25:9"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    2317
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2317,
                      "name": "did",
                      "nodeType": "VariableDeclaration",
                      "scope": 2349,
                      "src": "8343:17:9",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string"
                      },
                      "typeName": {
                        "id": 2316,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "8343:6:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage_ptr",
                          "typeString": "string"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2321,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 2318,
                      "name": "addrToDID",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1914,
                      "src": "8363:9:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_string_storage_$",
                        "typeString": "mapping(address => string storage ref)"
                      }
                    },
                    "id": 2320,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 2319,
                      "name": "account",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2289,
                      "src": "8373:7:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "8363:18:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage",
                      "typeString": "string storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8343:38:9"
                },
                {
                  "assignments": [
                    2323
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2323,
                      "name": "pHash",
                      "nodeType": "VariableDeclaration",
                      "scope": 2349,
                      "src": "8391:13:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 2322,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "8391:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2329,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 2326,
                            "name": "did",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2317,
                            "src": "8423:3:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          ],
                          "id": 2325,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "8417:5:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                            "typeString": "type(bytes storage pointer)"
                          },
                          "typeName": "bytes"
                        },
                        "id": 2327,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "8417:10:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 2324,
                      "name": "keccak256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 22165,
                      "src": "8407:9:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (bytes memory) pure returns (bytes32)"
                      }
                    },
                    "id": 2328,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8407:21:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8391:37:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2333,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "delete",
                    "prefix": true,
                    "src": "8439:33:9",
                    "subExpression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 2330,
                        "name": "dateAuthenticated",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1906,
                        "src": "8446:17:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 2332,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 2331,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2289,
                        "src": "8464:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "8446:26:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2334,
                  "nodeType": "ExpressionStatement",
                  "src": "8439:33:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2338,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "delete",
                    "prefix": true,
                    "src": "8482:25:9",
                    "subExpression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 2335,
                        "name": "addrToDID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1914,
                        "src": "8489:9:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_string_storage_$",
                          "typeString": "mapping(address => string storage ref)"
                        }
                      },
                      "id": 2337,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 2336,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2289,
                        "src": "8499:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "8489:18:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_storage",
                        "typeString": "string storage ref"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2339,
                  "nodeType": "ExpressionStatement",
                  "src": "8482:25:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2343,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "delete",
                    "prefix": true,
                    "src": "8517:30:9",
                    "subExpression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 2340,
                        "name": "didHashToAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1918,
                        "src": "8524:16:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
                          "typeString": "mapping(bytes32 => address)"
                        }
                      },
                      "id": 2342,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 2341,
                        "name": "pHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2323,
                        "src": "8541:5:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "8524:23:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2344,
                  "nodeType": "ExpressionStatement",
                  "src": "8517:30:9"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2346,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2289,
                        "src": "8582:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 2345,
                      "name": "WhitelistedRemoved",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1934,
                      "src": "8563:18:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 2347,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8563:27:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2348,
                  "nodeType": "EmitStatement",
                  "src": "8558:32:9"
                }
              ]
            },
            "documentation": null,
            "id": 2350,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_removeWhitelisted",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2290,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2289,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 2350,
                  "src": "8111:15:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2288,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8111:7:9",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8110:17:9"
            },
            "returnParameters": {
              "id": 2291,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8137:0:9"
            },
            "scope": 2380,
            "src": "8083:514:9",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2362,
              "nodeType": "Block",
              "src": "8876:46:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2359,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2352,
                        "src": "8907:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 2357,
                        "name": "blacklist",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1889,
                        "src": "8893:9:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$20654_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 2358,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "has",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 20740,
                      "src": "8893:13:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_Role_$20654_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_Role_$20654_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address) view returns (bool)"
                      }
                    },
                    "id": 2360,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8893:22:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 2356,
                  "id": 2361,
                  "nodeType": "Return",
                  "src": "8886:29:9"
                }
              ]
            },
            "documentation": null,
            "id": 2363,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isBlacklisted",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2353,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2352,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 2363,
                  "src": "8832:15:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2351,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8832:7:9",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8831:17:9"
            },
            "returnParameters": {
              "id": 2356,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2355,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2363,
                  "src": "8870:4:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 2354,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "8870:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8869:6:9"
            },
            "scope": 2380,
            "src": "8809:113:9",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 2378,
              "nodeType": "Block",
              "src": "9104:128:9",
              "statements": [
                {
                  "assignments": [
                    2371
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2371,
                      "name": "length",
                      "nodeType": "VariableDeclaration",
                      "scope": 2378,
                      "src": "9114:14:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2370,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "9114:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2372,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "9114:14:9"
                },
                {
                  "externalReferences": [
                    {
                      "length": {
                        "declaration": 2371,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "9161:6:9",
                        "valueSize": 1
                      }
                    },
                    {
                      "_addr": {
                        "declaration": 2365,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "9183:5:9",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 2373,
                  "nodeType": "InlineAssembly",
                  "operations": "{ length := extcodesize(_addr) }",
                  "src": "9138:61:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2376,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 2374,
                      "name": "length",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2371,
                      "src": "9215:6:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 2375,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "9224:1:9",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "9215:10:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 2369,
                  "id": 2377,
                  "nodeType": "Return",
                  "src": "9208:17:9"
                }
              ]
            },
            "documentation": null,
            "id": 2379,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isContract",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2366,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2365,
                  "name": "_addr",
                  "nodeType": "VariableDeclaration",
                  "scope": 2379,
                  "src": "9060:13:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2364,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "9060:7:9",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9059:15:9"
            },
            "returnParameters": {
              "id": 2369,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2368,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2379,
                  "src": "9098:4:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 2367,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "9098:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9097:6:9"
            },
            "scope": 2380,
            "src": "9040:192:9",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "internal"
          }
        ],
        "scope": 2381,
        "src": "456:8778:9"
      }
    ],
    "src": "0:9235:9"
  },
  "compiler": {
    "name": "solc",
    "version": "0.5.16+commit.9c3226ce.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.2.2",
  "updatedAt": "2021-08-23T07:33:52.182Z",
  "devdoc": {
    "methods": {
      "addIdentityAdmin(address)": {
        "details": "Adds a identity admin account. Is only callable by owner.",
        "params": {
          "account": "Address to be added"
        },
        "return": "true if successful"
      },
      "isIdentityAdmin(address)": {
        "details": "Checks if account is identity admin",
        "params": {
          "account": "Account to check"
        },
        "return": "Boolean indicating if account is identity admin"
      },
      "isOwner()": {
        "return": "true if `msg.sender` is the owner of the contract."
      },
      "isRegistered()": {
        "details": "function to see if an avatar has been set and if this scheme is registered",
        "return": "true if scheme is registered"
      },
      "isRegistered(address)": {
        "details": "function to see if an avatar has been set and if this scheme is registered",
        "return": "true if scheme is registered"
      },
      "owner()": {
        "return": "the address of the owner."
      },
      "pause()": {
        "details": "called by the owner to pause, triggers stopped state"
      },
      "paused()": {
        "return": "true if the contract is paused, false otherwise."
      },
      "removeIdentityAdmin(address)": {
        "details": "Removes a identity admin account. Is only callable by owner.",
        "params": {
          "account": "Address to be removed"
        },
        "return": "true if successful"
      },
      "renounceIdentityAdmin()": {
        "details": "Allows an admin to renounce their role"
      },
      "renounceOwnership()": {
        "details": "Allows the current owner to relinquish control of the contract."
      },
      "setAvatar(address)": {
        "details": "Function to set a new avatar and controller for scheme can only be done by owner of scheme"
      },
      "transferOwnership(address)": {
        "details": "Allows the current owner to transfer control of the contract to a newOwner.",
        "params": {
          "newOwner": "The address to transfer ownership to."
        }
      },
      "unpause()": {
        "details": "called by the owner to unpause, returns to normal state"
      }
    }
  },
  "userdoc": {
    "methods": {
      "renounceOwnership()": {
        "notice": "Renouncing to ownership will leave the contract without an owner. It will not be possible to call the functions with the `onlyOwner` modifier anymore."
      }
    }
  }
}