{
  "contractName": "OwnerRoles",
  "abi": [
    {
      "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": true,
          "internalType": "address",
          "name": "_owner",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "string",
          "name": "_role",
          "type": "string"
        }
      ],
      "name": "RoleAdded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_owner",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "string",
          "name": "_role",
          "type": "string"
        }
      ],
      "name": "RoleRemoved",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_owner",
          "type": "address"
        }
      ],
      "name": "isOwnerAdmin",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_owner",
          "type": "address"
        }
      ],
      "name": "addOwnerAdmin",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_owner",
          "type": "address"
        }
      ],
      "name": "removeOwnerAdmin",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_owner",
          "type": "address"
        }
      ],
      "name": "isRegistryAddressSetter",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_owner",
          "type": "address"
        }
      ],
      "name": "addRegistryAddressSetter",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_owner",
          "type": "address"
        }
      ],
      "name": "removeRegistryAddressSetter",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_owner",
          "type": "address"
        }
      ],
      "name": "isComplianceSetter",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_owner",
          "type": "address"
        }
      ],
      "name": "addComplianceSetter",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_owner",
          "type": "address"
        }
      ],
      "name": "removeComplianceSetter",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_owner",
          "type": "address"
        }
      ],
      "name": "isComplianceManager",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_owner",
          "type": "address"
        }
      ],
      "name": "addComplianceManager",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_owner",
          "type": "address"
        }
      ],
      "name": "removeComplianceManager",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_owner",
          "type": "address"
        }
      ],
      "name": "isClaimRegistryManager",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_owner",
          "type": "address"
        }
      ],
      "name": "addClaimRegistryManager",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_owner",
          "type": "address"
        }
      ],
      "name": "removeClaimRegistryManager",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_owner",
          "type": "address"
        }
      ],
      "name": "isIssuersRegistryManager",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_owner",
          "type": "address"
        }
      ],
      "name": "addIssuersRegistryManager",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_owner",
          "type": "address"
        }
      ],
      "name": "removeIssuersRegistryManager",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_owner",
          "type": "address"
        }
      ],
      "name": "isTokenInfoManager",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_owner",
          "type": "address"
        }
      ],
      "name": "addTokenInfoManager",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_owner",
          "type": "address"
        }
      ],
      "name": "removeTokenInfoManager",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"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\":true,\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"_role\",\"type\":\"string\"}],\"name\":\"RoleAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"_role\",\"type\":\"string\"}],\"name\":\"RoleRemoved\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"addClaimRegistryManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"addComplianceManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"addComplianceSetter\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"addIssuersRegistryManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"addOwnerAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"addRegistryAddressSetter\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"addTokenInfoManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"isClaimRegistryManager\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"isComplianceManager\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"isComplianceSetter\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"isIssuersRegistryManager\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"isOwnerAdmin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"isRegistryAddressSetter\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"isTokenInfoManager\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"removeClaimRegistryManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"removeComplianceManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"removeComplianceSetter\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"removeIssuersRegistryManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"removeOwnerAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"removeRegistryAddressSetter\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"removeTokenInfoManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"isClaimRegistryManager(address)\":{\"details\":\"ClaimRegistryManager Role _claimRegistryManager\"},\"isComplianceManager(address)\":{\"details\":\"ComplianceManager Role _complianceManager\"},\"isComplianceSetter(address)\":{\"details\":\"ComplianceSetter Role _complianceSetter\"},\"isIssuersRegistryManager(address)\":{\"details\":\"IssuersRegistryManager Role _issuersRegistryManager\"},\"isOwnerAdmin(address)\":{\"details\":\"OwnerAdmin Role _ownerAdmin\"},\"isRegistryAddressSetter(address)\":{\"details\":\"RegistryAddressSetter Role _registryAddressSetter\"},\"isTokenInfoManager(address)\":{\"details\":\"TokenInfoManager Role _tokenInfoManager\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"project:/contracts/roles/OwnerRoles.sol\":\"OwnerRoles\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xa94b34880e3c1b0b931662cb1c09e5dfa6662f31cba80e07c5ee71cd135c9673\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://40fb1b5102468f783961d0af743f91b9980cf66b50d1d12009f6bb1869cea4d2\",\"dweb:/ipfs/QmYqEbJML4jB1GHbzD4cUZDtJg5wVwNm3vDJq1GbyDus8y\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92\",\"dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3\"]},\"project:/contracts/roles/OwnerRoles.sol\":{\"keccak256\":\"0xbee04028f75c0a4b5e88734804eacf3df894f40e01d4c424ef6c80887deda098\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://cb4fb927124798f04c1263fdb07663cb5486be206686e18b191d8a0bee90aeed\",\"dweb:/ipfs/QmSsdAgzQK46QJnc7Lgheu5Vo7yUD68y8zVR2kUXwSrkDx\"]},\"project:/contracts/roles/Roles.sol\":{\"keccak256\":\"0x9e018cafd4e2a2890d4ed32f0a4e5edf92fe95000f35b15d7932890bd0efdb95\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://6c07fd269689b662d782817bc4fdfc00d33fd7e320c20916528fff7853847954\",\"dweb:/ipfs/QmUz39kdgQM8M2W2gcBZ8Vi3mzzSmXUx9NXxTJatYYQJyw\"]}},\"version\":1}",
  "bytecode": "0x608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610fcd8061007e6000396000f3fe608060405234801561001057600080fd5b50600436106101285760003560e01c8063039ec2cd1461012d57806303ff5014146101425780632447e50b1461016a5780633ba7c75e1461017d5780633c734ce81461019057806340522554146101a357806346b686f8146101b657806354b9797f146101c957806362cdd482146101dc5780636ff7bff7146101ef578063715018a614610202578063828709371461020a578063882fc6ca1461021d5780638da5cb5b14610230578063934b2da41461025057806394e69f1b14610263578063a66bcc1c14610276578063ac95fc9114610289578063ae5aaa3b1461029c578063ce4bdac7146102af578063e110255b146102c2578063f2fde38b146102d5578063faed696a146102e8578063ff806311146102fb575b600080fd5b61014061013b366004610ea6565b61030e565b005b610155610150366004610ea6565b6103bf565b60405190151581526020015b60405180910390f35b610155610178366004610ea6565b6103d2565b61015561018b366004610ea6565b6103df565b61015561019e366004610ea6565b6103ec565b6101406101b1366004610ea6565b6103f9565b6101406101c4366004610ea6565b610490565b6101406101d7366004610ea6565b610528565b6101556101ea366004610ea6565b6105b9565b6101406101fd366004610ea6565b6105c6565b610140610663565b610155610218366004610ea6565b610677565b61014061022b366004610ea6565b610684565b61023861071b565b6040516001600160a01b039091168152602001610161565b61014061025e366004610ea6565b61072a565b610140610271366004610ea6565b6107bb565b610140610284366004610ea6565b610852565b610140610297366004610ea6565b6108ea565b6101406102aa366004610ea6565b610987565b6101406102bd366004610ea6565b610a23565b6101406102d0366004610ea6565b610aba565b6101406102e3366004610ea6565b610b55565b6101406102f6366004610ea6565b610bce565b610155610309366004610ea6565b610c69565b3361031761071b565b6001600160a01b031614806103305750610330336105b9565b6103555760405162461bcd60e51b815260040161034c90610ed6565b60405180910390fd5b610360600282610c76565b60408051808201825260158152742932b3b4b9ba393ca0b2323932b9b9a9b2ba3a32b960591b602082015290516001600160a01b03831690600080516020610f58833981519152906103b3908490610f09565b60405180910390a25050565b60006103cc600483610cf8565b92915050565b60006103cc600783610cf8565b60006103cc600383610cf8565b60006103cc600583610cf8565b3361040261071b565b6001600160a01b0316148061041b575061041b336105b9565b6104375760405162461bcd60e51b815260040161034c90610ed6565b610442600382610c76565b604080518082018252601081526f21b7b6b83634b0b731b2a9b2ba3a32b960811b602082015290516001600160a01b03831690600080516020610f58833981519152906103b3908490610f09565b3361049961071b565b6001600160a01b031614806104b257506104b2336105b9565b6104ce5760405162461bcd60e51b815260040161034c90610ed6565b6104d9600482610c76565b604080518082018252601181527021b7b6b83634b0b731b2a6b0b730b3b2b960791b602082015290516001600160a01b03831690600080516020610f58833981519152906103b3908490610f09565b3361053161071b565b6001600160a01b0316148061054a575061054a336105b9565b6105665760405162461bcd60e51b815260040161034c90610ed6565b610571600182610c76565b604080518082018252600a81526927bbb732b920b236b4b760b11b602082015290516001600160a01b03831690600080516020610f58833981519152906103b3908490610f09565b60006103cc600183610cf8565b336105cf61071b565b6001600160a01b031614806105e857506105e8336105b9565b6106045760405162461bcd60e51b815260040161034c90610ed6565b61060f600682610c76565b604080518082018252601681527524b9b9bab2b939a932b3b4b9ba393ca6b0b730b3b2b960511b602082015290516001600160a01b03831690600080516020610f58833981519152906103b3908490610f09565b61066b610d7b565b6106756000610dda565b565b60006103cc600283610cf8565b3361068d61071b565b6001600160a01b031614806106a657506106a6336105b9565b6106c25760405162461bcd60e51b815260040161034c90610ed6565b6106cd600782610c76565b604080518082018252601081526f2a37b5b2b724b73337a6b0b730b3b2b960811b602082015290516001600160a01b03831690600080516020610f58833981519152906103b3908490610f09565b6000546001600160a01b031690565b3361073361071b565b6001600160a01b0316148061074c575061074c336105b9565b6107685760405162461bcd60e51b815260040161034c90610ed6565b610773600182610e2a565b604080518082018252600a81526927bbb732b920b236b4b760b11b602082015290516001600160a01b03831690600080516020610f78833981519152906103b3908490610f09565b336107c461071b565b6001600160a01b031614806107dd57506107dd336105b9565b6107f95760405162461bcd60e51b815260040161034c90610ed6565b610804600782610e2a565b604080518082018252601081526f2a37b5b2b724b73337a6b0b730b3b2b960811b602082015290516001600160a01b03831690600080516020610f78833981519152906103b3908490610f09565b3361085b61071b565b6001600160a01b031614806108745750610874336105b9565b6108905760405162461bcd60e51b815260040161034c90610ed6565b61089b600482610e2a565b604080518082018252601181527021b7b6b83634b0b731b2a6b0b730b3b2b960791b602082015290516001600160a01b03831690600080516020610f78833981519152906103b3908490610f09565b336108f361071b565b6001600160a01b0316148061090c575061090c336105b9565b6109285760405162461bcd60e51b815260040161034c90610ed6565b610933600682610e2a565b604080518082018252601681527524b9b9bab2b939a932b3b4b9ba393ca6b0b730b3b2b960511b602082015290516001600160a01b03831690600080516020610f78833981519152906103b3908490610f09565b3361099061071b565b6001600160a01b031614806109a957506109a9336105b9565b6109c55760405162461bcd60e51b815260040161034c90610ed6565b6109d0600282610e2a565b60408051808201825260158152742932b3b4b9ba393ca0b2323932b9b9a9b2ba3a32b960591b602082015290516001600160a01b03831690600080516020610f78833981519152906103b3908490610f09565b33610a2c61071b565b6001600160a01b03161480610a455750610a45336105b9565b610a615760405162461bcd60e51b815260040161034c90610ed6565b610a6c600382610e2a565b604080518082018252601081526f21b7b6b83634b0b731b2a9b2ba3a32b960811b602082015290516001600160a01b03831690600080516020610f78833981519152906103b3908490610f09565b33610ac361071b565b6001600160a01b03161480610adc5750610adc336105b9565b610af85760405162461bcd60e51b815260040161034c90610ed6565b610b03600582610c76565b604080518082018252601481527321b630b4b6a932b3b4b9ba393ca6b0b730b3b2b960611b602082015290516001600160a01b03831690600080516020610f58833981519152906103b3908490610f09565b610b5d610d7b565b6001600160a01b038116610bc25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161034c565b610bcb81610dda565b50565b33610bd761071b565b6001600160a01b03161480610bf05750610bf0336105b9565b610c0c5760405162461bcd60e51b815260040161034c90610ed6565b610c17600582610e2a565b604080518082018252601481527321b630b4b6a932b3b4b9ba393ca6b0b730b3b2b960611b602082015290516001600160a01b03831690600080516020610f78833981519152906103b3908490610f09565b60006103cc600683610cf8565b610c808282610cf8565b610cd65760405162461bcd60e51b815260206004820152602160248201527f526f6c65733a206163636f756e7420646f6573206e6f74206861766520726f6c6044820152606560f81b606482015260840161034c565b6001600160a01b0316600090815260209190915260409020805460ff19169055565b60006001600160a01b038216610d5b5760405162461bcd60e51b815260206004820152602260248201527f526f6c65733a206163636f756e7420697320746865207a65726f206164647265604482015261737360f01b606482015260840161034c565b506001600160a01b03166000908152602091909152604090205460ff1690565b33610d8461071b565b6001600160a01b0316146106755760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161034c565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610e348282610cf8565b15610e815760405162461bcd60e51b815260206004820152601f60248201527f526f6c65733a206163636f756e7420616c72656164792068617320726f6c6500604482015260640161034c565b6001600160a01b0316600090815260209190915260409020805460ff19166001179055565b600060208284031215610eb857600080fd5b81356001600160a01b0381168114610ecf57600080fd5b9392505050565b6020808252601990820152782937b6329d1029b2b73232b91034b9902727aa1020b236b4b760391b604082015260600190565b600060208083528351808285015260005b81811015610f3657858101830151858201604001528201610f1a565b506000604082860101526040601f19601f830116850101925050509291505056fed211483f91fc6eff862467f8de606587a30c8fc9981056f051b897a418df803abfec83d64eaa953f2708271a023ab9ee82057f8f3578d548c1a4ba0b5b700489a26469706673582212204c0117338170091555c653de9d99dafe38d5cc27dddbdd3995952efba20aa1d664736f6c63430008110033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101285760003560e01c8063039ec2cd1461012d57806303ff5014146101425780632447e50b1461016a5780633ba7c75e1461017d5780633c734ce81461019057806340522554146101a357806346b686f8146101b657806354b9797f146101c957806362cdd482146101dc5780636ff7bff7146101ef578063715018a614610202578063828709371461020a578063882fc6ca1461021d5780638da5cb5b14610230578063934b2da41461025057806394e69f1b14610263578063a66bcc1c14610276578063ac95fc9114610289578063ae5aaa3b1461029c578063ce4bdac7146102af578063e110255b146102c2578063f2fde38b146102d5578063faed696a146102e8578063ff806311146102fb575b600080fd5b61014061013b366004610ea6565b61030e565b005b610155610150366004610ea6565b6103bf565b60405190151581526020015b60405180910390f35b610155610178366004610ea6565b6103d2565b61015561018b366004610ea6565b6103df565b61015561019e366004610ea6565b6103ec565b6101406101b1366004610ea6565b6103f9565b6101406101c4366004610ea6565b610490565b6101406101d7366004610ea6565b610528565b6101556101ea366004610ea6565b6105b9565b6101406101fd366004610ea6565b6105c6565b610140610663565b610155610218366004610ea6565b610677565b61014061022b366004610ea6565b610684565b61023861071b565b6040516001600160a01b039091168152602001610161565b61014061025e366004610ea6565b61072a565b610140610271366004610ea6565b6107bb565b610140610284366004610ea6565b610852565b610140610297366004610ea6565b6108ea565b6101406102aa366004610ea6565b610987565b6101406102bd366004610ea6565b610a23565b6101406102d0366004610ea6565b610aba565b6101406102e3366004610ea6565b610b55565b6101406102f6366004610ea6565b610bce565b610155610309366004610ea6565b610c69565b3361031761071b565b6001600160a01b031614806103305750610330336105b9565b6103555760405162461bcd60e51b815260040161034c90610ed6565b60405180910390fd5b610360600282610c76565b60408051808201825260158152742932b3b4b9ba393ca0b2323932b9b9a9b2ba3a32b960591b602082015290516001600160a01b03831690600080516020610f58833981519152906103b3908490610f09565b60405180910390a25050565b60006103cc600483610cf8565b92915050565b60006103cc600783610cf8565b60006103cc600383610cf8565b60006103cc600583610cf8565b3361040261071b565b6001600160a01b0316148061041b575061041b336105b9565b6104375760405162461bcd60e51b815260040161034c90610ed6565b610442600382610c76565b604080518082018252601081526f21b7b6b83634b0b731b2a9b2ba3a32b960811b602082015290516001600160a01b03831690600080516020610f58833981519152906103b3908490610f09565b3361049961071b565b6001600160a01b031614806104b257506104b2336105b9565b6104ce5760405162461bcd60e51b815260040161034c90610ed6565b6104d9600482610c76565b604080518082018252601181527021b7b6b83634b0b731b2a6b0b730b3b2b960791b602082015290516001600160a01b03831690600080516020610f58833981519152906103b3908490610f09565b3361053161071b565b6001600160a01b0316148061054a575061054a336105b9565b6105665760405162461bcd60e51b815260040161034c90610ed6565b610571600182610c76565b604080518082018252600a81526927bbb732b920b236b4b760b11b602082015290516001600160a01b03831690600080516020610f58833981519152906103b3908490610f09565b60006103cc600183610cf8565b336105cf61071b565b6001600160a01b031614806105e857506105e8336105b9565b6106045760405162461bcd60e51b815260040161034c90610ed6565b61060f600682610c76565b604080518082018252601681527524b9b9bab2b939a932b3b4b9ba393ca6b0b730b3b2b960511b602082015290516001600160a01b03831690600080516020610f58833981519152906103b3908490610f09565b61066b610d7b565b6106756000610dda565b565b60006103cc600283610cf8565b3361068d61071b565b6001600160a01b031614806106a657506106a6336105b9565b6106c25760405162461bcd60e51b815260040161034c90610ed6565b6106cd600782610c76565b604080518082018252601081526f2a37b5b2b724b73337a6b0b730b3b2b960811b602082015290516001600160a01b03831690600080516020610f58833981519152906103b3908490610f09565b6000546001600160a01b031690565b3361073361071b565b6001600160a01b0316148061074c575061074c336105b9565b6107685760405162461bcd60e51b815260040161034c90610ed6565b610773600182610e2a565b604080518082018252600a81526927bbb732b920b236b4b760b11b602082015290516001600160a01b03831690600080516020610f78833981519152906103b3908490610f09565b336107c461071b565b6001600160a01b031614806107dd57506107dd336105b9565b6107f95760405162461bcd60e51b815260040161034c90610ed6565b610804600782610e2a565b604080518082018252601081526f2a37b5b2b724b73337a6b0b730b3b2b960811b602082015290516001600160a01b03831690600080516020610f78833981519152906103b3908490610f09565b3361085b61071b565b6001600160a01b031614806108745750610874336105b9565b6108905760405162461bcd60e51b815260040161034c90610ed6565b61089b600482610e2a565b604080518082018252601181527021b7b6b83634b0b731b2a6b0b730b3b2b960791b602082015290516001600160a01b03831690600080516020610f78833981519152906103b3908490610f09565b336108f361071b565b6001600160a01b0316148061090c575061090c336105b9565b6109285760405162461bcd60e51b815260040161034c90610ed6565b610933600682610e2a565b604080518082018252601681527524b9b9bab2b939a932b3b4b9ba393ca6b0b730b3b2b960511b602082015290516001600160a01b03831690600080516020610f78833981519152906103b3908490610f09565b3361099061071b565b6001600160a01b031614806109a957506109a9336105b9565b6109c55760405162461bcd60e51b815260040161034c90610ed6565b6109d0600282610e2a565b60408051808201825260158152742932b3b4b9ba393ca0b2323932b9b9a9b2ba3a32b960591b602082015290516001600160a01b03831690600080516020610f78833981519152906103b3908490610f09565b33610a2c61071b565b6001600160a01b03161480610a455750610a45336105b9565b610a615760405162461bcd60e51b815260040161034c90610ed6565b610a6c600382610e2a565b604080518082018252601081526f21b7b6b83634b0b731b2a9b2ba3a32b960811b602082015290516001600160a01b03831690600080516020610f78833981519152906103b3908490610f09565b33610ac361071b565b6001600160a01b03161480610adc5750610adc336105b9565b610af85760405162461bcd60e51b815260040161034c90610ed6565b610b03600582610c76565b604080518082018252601481527321b630b4b6a932b3b4b9ba393ca6b0b730b3b2b960611b602082015290516001600160a01b03831690600080516020610f58833981519152906103b3908490610f09565b610b5d610d7b565b6001600160a01b038116610bc25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161034c565b610bcb81610dda565b50565b33610bd761071b565b6001600160a01b03161480610bf05750610bf0336105b9565b610c0c5760405162461bcd60e51b815260040161034c90610ed6565b610c17600582610e2a565b604080518082018252601481527321b630b4b6a932b3b4b9ba393ca6b0b730b3b2b960611b602082015290516001600160a01b03831690600080516020610f78833981519152906103b3908490610f09565b60006103cc600683610cf8565b610c808282610cf8565b610cd65760405162461bcd60e51b815260206004820152602160248201527f526f6c65733a206163636f756e7420646f6573206e6f74206861766520726f6c6044820152606560f81b606482015260840161034c565b6001600160a01b0316600090815260209190915260409020805460ff19169055565b60006001600160a01b038216610d5b5760405162461bcd60e51b815260206004820152602260248201527f526f6c65733a206163636f756e7420697320746865207a65726f206164647265604482015261737360f01b606482015260840161034c565b506001600160a01b03166000908152602091909152604090205460ff1690565b33610d8461071b565b6001600160a01b0316146106755760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161034c565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610e348282610cf8565b15610e815760405162461bcd60e51b815260206004820152601f60248201527f526f6c65733a206163636f756e7420616c72656164792068617320726f6c6500604482015260640161034c565b6001600160a01b0316600090815260209190915260409020805460ff19166001179055565b600060208284031215610eb857600080fd5b81356001600160a01b0381168114610ecf57600080fd5b9392505050565b6020808252601990820152782937b6329d1029b2b73232b91034b9902727aa1020b236b4b760391b604082015260600190565b600060208083528351808285015260005b81811015610f3657858101830151858201604001528201610f1a565b506000604082860101526040601f19601f830116850101925050509291505056fed211483f91fc6eff862467f8de606587a30c8fc9981056f051b897a418df803abfec83d64eaa953f2708271a023ab9ee82057f8f3578d548c1a4ba0b5b700489a26469706673582212204c0117338170091555c653de9d99dafe38d5cc27dddbdd3995952efba20aa1d664736f6c63430008110033",
  "immutableReferences": {},
  "generatedSources": [],
  "deployedGeneratedSources": [
    {
      "ast": {
        "nodeType": "YulBlock",
        "src": "0:3542:54",
        "statements": [
          {
            "nodeType": "YulBlock",
            "src": "6:3:54",
            "statements": []
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "84:216:54",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "130:16:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "139:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "142:1:54",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "132:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "132:12:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "132:12:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "105:7:54"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "114:9:54"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "101:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "101:23:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "126:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "97:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "97:32:54"
                  },
                  "nodeType": "YulIf",
                  "src": "94:52:54"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "155:36:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "181:9:54"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "168:12:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "168:23:54"
                  },
                  "variables": [
                    {
                      "name": "value",
                      "nodeType": "YulTypedName",
                      "src": "159:5:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "254:16:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "263:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "266:1:54",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "256:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "256:12:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "256:12:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nodeType": "YulIdentifier",
                            "src": "213:5:54"
                          },
                          {
                            "arguments": [
                              {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "224:5:54"
                              },
                              {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "239:3:54",
                                        "type": "",
                                        "value": "160"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "244:1:54",
                                        "type": "",
                                        "value": "1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "235:3:54"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "235:11:54"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "248:1:54",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "231:3:54"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "231:19:54"
                              }
                            ],
                            "functionName": {
                              "name": "and",
                              "nodeType": "YulIdentifier",
                              "src": "220:3:54"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "220:31:54"
                          }
                        ],
                        "functionName": {
                          "name": "eq",
                          "nodeType": "YulIdentifier",
                          "src": "210:2:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "210:42:54"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "203:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "203:50:54"
                  },
                  "nodeType": "YulIf",
                  "src": "200:70:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "279:15:54",
                  "value": {
                    "name": "value",
                    "nodeType": "YulIdentifier",
                    "src": "289:5:54"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "279:6:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_address",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "50:9:54",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "61:7:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "73:6:54",
                "type": ""
              }
            ],
            "src": "14:286:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "400:92:54",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "410:26:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "422:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "433:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "418:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "418:18:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "410:4:54"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "452:9:54"
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "value0",
                                "nodeType": "YulIdentifier",
                                "src": "477:6:54"
                              }
                            ],
                            "functionName": {
                              "name": "iszero",
                              "nodeType": "YulIdentifier",
                              "src": "470:6:54"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "470:14:54"
                          }
                        ],
                        "functionName": {
                          "name": "iszero",
                          "nodeType": "YulIdentifier",
                          "src": "463:6:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "463:22:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "445:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "445:41:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "445:41:54"
                }
              ]
            },
            "name": "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "369:9:54",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "380:6:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "391:4:54",
                "type": ""
              }
            ],
            "src": "305:187:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "598:102:54",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "608:26:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "620:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "631:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "616:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "616:18:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "608:4:54"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "650:9:54"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "665:6:54"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "681:3:54",
                                    "type": "",
                                    "value": "160"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "686:1:54",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "shl",
                                  "nodeType": "YulIdentifier",
                                  "src": "677:3:54"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "677:11:54"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "690:1:54",
                                "type": "",
                                "value": "1"
                              }
                            ],
                            "functionName": {
                              "name": "sub",
                              "nodeType": "YulIdentifier",
                              "src": "673:3:54"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "673:19:54"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "661:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "661:32:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "643:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "643:51:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "643:51:54"
                }
              ]
            },
            "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "567:9:54",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "578:6:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "589:4:54",
                "type": ""
              }
            ],
            "src": "497:203:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "879:175:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "896:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "907:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "889:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "889:21:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "889:21:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "930:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "941:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "926:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "926:18:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "946:2:54",
                        "type": "",
                        "value": "25"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "919:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "919:30:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "919:30:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "969:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "980:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "965:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "965:18:54"
                      },
                      {
                        "hexValue": "526f6c653a2053656e646572206973204e4f542041646d696e",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "985:27:54",
                        "type": "",
                        "value": "Role: Sender is NOT Admin"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "958:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "958:55:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "958:55:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "1022:26:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "1034:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1045:2:54",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "1030:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1030:18:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "1022:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_e0747ebade9609a75d2f7261d19516256a9edb89fa8d2c0d89fd74d44bfd7b24__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "856:9:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "870:4:54",
                "type": ""
              }
            ],
            "src": "705:349:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "1180:427:54",
              "statements": [
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "1190:12:54",
                  "value": {
                    "kind": "number",
                    "nodeType": "YulLiteral",
                    "src": "1200:2:54",
                    "type": "",
                    "value": "32"
                  },
                  "variables": [
                    {
                      "name": "_1",
                      "nodeType": "YulTypedName",
                      "src": "1194:2:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "1218:9:54"
                      },
                      {
                        "name": "_1",
                        "nodeType": "YulIdentifier",
                        "src": "1229:2:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "1211:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1211:21:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1211:21:54"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "1241:27:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "1261:6:54"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "1255:5:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1255:13:54"
                  },
                  "variables": [
                    {
                      "name": "length",
                      "nodeType": "YulTypedName",
                      "src": "1245:6:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "1288:9:54"
                          },
                          {
                            "name": "_1",
                            "nodeType": "YulIdentifier",
                            "src": "1299:2:54"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "1284:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1284:18:54"
                      },
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "1304:6:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "1277:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1277:34:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1277:34:54"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "1320:10:54",
                  "value": {
                    "kind": "number",
                    "nodeType": "YulLiteral",
                    "src": "1329:1:54",
                    "type": "",
                    "value": "0"
                  },
                  "variables": [
                    {
                      "name": "i",
                      "nodeType": "YulTypedName",
                      "src": "1324:1:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "1389:90:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "name": "headStart",
                                      "nodeType": "YulIdentifier",
                                      "src": "1418:9:54"
                                    },
                                    {
                                      "name": "i",
                                      "nodeType": "YulIdentifier",
                                      "src": "1429:1:54"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "add",
                                    "nodeType": "YulIdentifier",
                                    "src": "1414:3:54"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "1414:17:54"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "1433:2:54",
                                  "type": "",
                                  "value": "64"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "1410:3:54"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "1410:26:54"
                            },
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "1452:6:54"
                                        },
                                        {
                                          "name": "i",
                                          "nodeType": "YulIdentifier",
                                          "src": "1460:1:54"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "1448:3:54"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1448:14:54"
                                    },
                                    {
                                      "name": "_1",
                                      "nodeType": "YulIdentifier",
                                      "src": "1464:2:54"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "add",
                                    "nodeType": "YulIdentifier",
                                    "src": "1444:3:54"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "1444:23:54"
                                }
                              ],
                              "functionName": {
                                "name": "mload",
                                "nodeType": "YulIdentifier",
                                "src": "1438:5:54"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "1438:30:54"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "1403:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "1403:66:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "1403:66:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "i",
                        "nodeType": "YulIdentifier",
                        "src": "1350:1:54"
                      },
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "1353:6:54"
                      }
                    ],
                    "functionName": {
                      "name": "lt",
                      "nodeType": "YulIdentifier",
                      "src": "1347:2:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1347:13:54"
                  },
                  "nodeType": "YulForLoop",
                  "post": {
                    "nodeType": "YulBlock",
                    "src": "1361:19:54",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "1363:15:54",
                        "value": {
                          "arguments": [
                            {
                              "name": "i",
                              "nodeType": "YulIdentifier",
                              "src": "1372:1:54"
                            },
                            {
                              "name": "_1",
                              "nodeType": "YulIdentifier",
                              "src": "1375:2:54"
                            }
                          ],
                          "functionName": {
                            "name": "add",
                            "nodeType": "YulIdentifier",
                            "src": "1368:3:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "1368:10:54"
                        },
                        "variableNames": [
                          {
                            "name": "i",
                            "nodeType": "YulIdentifier",
                            "src": "1363:1:54"
                          }
                        ]
                      }
                    ]
                  },
                  "pre": {
                    "nodeType": "YulBlock",
                    "src": "1343:3:54",
                    "statements": []
                  },
                  "src": "1339:140:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "1503:9:54"
                              },
                              {
                                "name": "length",
                                "nodeType": "YulIdentifier",
                                "src": "1514:6:54"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "1499:3:54"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "1499:22:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "1523:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "1495:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1495:31:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1528:1:54",
                        "type": "",
                        "value": "0"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "1488:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1488:42:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1488:42:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "1539:62:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "1555:9:54"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "1574:6:54"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1582:2:54",
                                    "type": "",
                                    "value": "31"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "1570:3:54"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1570:15:54"
                              },
                              {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1591:2:54",
                                    "type": "",
                                    "value": "31"
                                  }
                                ],
                                "functionName": {
                                  "name": "not",
                                  "nodeType": "YulIdentifier",
                                  "src": "1587:3:54"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1587:7:54"
                              }
                            ],
                            "functionName": {
                              "name": "and",
                              "nodeType": "YulIdentifier",
                              "src": "1566:3:54"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "1566:29:54"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "1551:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1551:45:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1598:2:54",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "1547:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1547:54:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "1539:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "1149:9:54",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "1160:6:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "1171:4:54",
                "type": ""
              }
            ],
            "src": "1059:548:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "1786:228:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "1803:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1814:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "1796:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1796:21:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1796:21:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "1837:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "1848:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "1833:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1833:18:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1853:2:54",
                        "type": "",
                        "value": "38"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "1826:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1826:30:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1826:30:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "1876:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "1887:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "1872:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1872:18:54"
                      },
                      {
                        "hexValue": "4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "1892:34:54",
                        "type": "",
                        "value": "Ownable: new owner is the zero a"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "1865:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1865:62:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1865:62:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "1947:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "1958:2:54",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "1943:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1943:18:54"
                      },
                      {
                        "hexValue": "646472657373",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "1963:8:54",
                        "type": "",
                        "value": "ddress"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "1936:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1936:36:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1936:36:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "1981:27:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "1993:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "2004:3:54",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "1989:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1989:19:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "1981:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "1763:9:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "1777:4:54",
                "type": ""
              }
            ],
            "src": "1612:402:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "2193:223:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "2210:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "2221:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "2203:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2203:21:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2203:21:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "2244:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2255:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "2240:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2240:18:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "2260:2:54",
                        "type": "",
                        "value": "33"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "2233:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2233:30:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2233:30:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "2283:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2294:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "2279:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2279:18:54"
                      },
                      {
                        "hexValue": "526f6c65733a206163636f756e7420646f6573206e6f74206861766520726f6c",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "2299:34:54",
                        "type": "",
                        "value": "Roles: account does not have rol"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "2272:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2272:62:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2272:62:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "2354:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2365:2:54",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "2350:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2350:18:54"
                      },
                      {
                        "hexValue": "65",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "2370:3:54",
                        "type": "",
                        "value": "e"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "2343:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2343:31:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2343:31:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "2383:27:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "2395:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "2406:3:54",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "2391:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2391:19:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "2383:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_7bd893145ac435f339bb7c288622d270324b7033b011f693aca172f5cbc3c257__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "2170:9:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "2184:4:54",
                "type": ""
              }
            ],
            "src": "2019:397:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "2595:224:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "2612:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "2623:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "2605:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2605:21:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2605:21:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "2646:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2657:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "2642:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2642:18:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "2662:2:54",
                        "type": "",
                        "value": "34"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "2635:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2635:30:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2635:30:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "2685:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2696:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "2681:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2681:18:54"
                      },
                      {
                        "hexValue": "526f6c65733a206163636f756e7420697320746865207a65726f206164647265",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "2701:34:54",
                        "type": "",
                        "value": "Roles: account is the zero addre"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "2674:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2674:62:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2674:62:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "2756:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2767:2:54",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "2752:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2752:18:54"
                      },
                      {
                        "hexValue": "7373",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "2772:4:54",
                        "type": "",
                        "value": "ss"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "2745:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2745:32:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2745:32:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "2786:27:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "2798:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "2809:3:54",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "2794:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2794:19:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "2786:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_9d214fa89563f4e6456a3929327e54500ea1cde2c0ba9fb2035ec106190d682f__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "2572:9:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "2586:4:54",
                "type": ""
              }
            ],
            "src": "2421:398:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "2998:182:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "3015:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3026:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "3008:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3008:21:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "3008:21:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "3049:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "3060:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "3045:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3045:18:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3065:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "3038:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3038:30:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "3038:30:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "3088:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "3099:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "3084:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3084:18:54"
                      },
                      {
                        "hexValue": "4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "3104:34:54",
                        "type": "",
                        "value": "Ownable: caller is not the owner"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "3077:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3077:62:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "3077:62:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "3148:26:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "3160:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3171:2:54",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "3156:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3156:18:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "3148:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "2975:9:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "2989:4:54",
                "type": ""
              }
            ],
            "src": "2824:356:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "3359:181:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "3376:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3387:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "3369:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3369:21:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "3369:21:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "3410:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "3421:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "3406:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3406:18:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3426:2:54",
                        "type": "",
                        "value": "31"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "3399:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3399:30:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "3399:30:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "3449:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "3460:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "3445:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3445:18:54"
                      },
                      {
                        "hexValue": "526f6c65733a206163636f756e7420616c72656164792068617320726f6c65",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "3465:33:54",
                        "type": "",
                        "value": "Roles: account already has role"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "3438:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3438:61:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "3438:61:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "3508:26:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "3520:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3531:2:54",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "3516:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3516:18:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "3508:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_0f76c3a3e97a37fcdff532c2741c10933ebf2b769d5475388e30ae4f7155f13a__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "3336:9:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "3350:4:54",
                "type": ""
              }
            ],
            "src": "3185:355:54"
          }
        ]
      },
      "contents": "{\n    { }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, iszero(iszero(value0)))\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_encode_tuple_t_stringliteral_e0747ebade9609a75d2f7261d19516256a9edb89fa8d2c0d89fd74d44bfd7b24__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 25)\n        mstore(add(headStart, 64), \"Role: Sender is NOT Admin\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        let _1 := 32\n        mstore(headStart, _1)\n        let length := mload(value0)\n        mstore(add(headStart, _1), length)\n        let i := 0\n        for { } lt(i, length) { i := add(i, _1) }\n        {\n            mstore(add(add(headStart, i), 64), mload(add(add(value0, i), _1)))\n        }\n        mstore(add(add(headStart, length), 64), 0)\n        tail := add(add(headStart, and(add(length, 31), not(31))), 64)\n    }\n    function abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 38)\n        mstore(add(headStart, 64), \"Ownable: new owner is the zero a\")\n        mstore(add(headStart, 96), \"ddress\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_7bd893145ac435f339bb7c288622d270324b7033b011f693aca172f5cbc3c257__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 33)\n        mstore(add(headStart, 64), \"Roles: account does not have rol\")\n        mstore(add(headStart, 96), \"e\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_9d214fa89563f4e6456a3929327e54500ea1cde2c0ba9fb2035ec106190d682f__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 34)\n        mstore(add(headStart, 64), \"Roles: account is the zero addre\")\n        mstore(add(headStart, 96), \"ss\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 32)\n        mstore(add(headStart, 64), \"Ownable: caller is not the owner\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_0f76c3a3e97a37fcdff532c2741c10933ebf2b769d5475388e30ae4f7155f13a__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 31)\n        mstore(add(headStart, 64), \"Roles: account already has role\")\n        tail := add(headStart, 96)\n    }\n}",
      "id": 54,
      "language": "Yul",
      "name": "#utility.yul"
    }
  ],
  "sourceMap": "1195:4950:48:-:0;;;;;;;;;;;;-1:-1:-1;936:32:13;719:10:20;936:18:13;:32::i;:::-;1195:4950:48;;2433:187:13;2506:16;2525:6;;-1:-1:-1;;;;;2541:17:13;;;-1:-1:-1;;;;;;2541:17:13;;;;;;2573:40;;2525:6;;;;;;;2573:40;;2506:16;2573:40;2496:124;2433:187;:::o;1195:4950:48:-;;;;;;;",
  "deployedSourceMap": "1195:4950:48:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2801:222;;;;;;:::i;:::-;;:::i;:::-;;3687:126;;;;;;:::i;:::-;;:::i;:::-;;;470:14:54;;463:22;445:41;;433:2;418:18;3687:126:48;;;;;;;;5601:124;;;;;;:::i;:::-;;:::i;3083:::-;;;;;;:::i;:::-;;:::i;4305:132::-;;;;;;:::i;:::-;;:::i;3418:207::-;;;;;;:::i;:::-;;:::i;4027:210::-;;;;;;:::i;:::-;;:::i;2182:189::-;;;;;;:::i;:::-;;:::i;1877:112::-;;;;;;:::i;:::-;;:::i;5316:225::-;;;;;;:::i;:::-;;:::i;1831:101:13:-;;;:::i;2441:134:48:-;;;;;;:::i;:::-;;:::i;5936:207::-;;;;;;:::i;:::-;;:::i;1201:85:13:-;;;:::i;:::-;;;-1:-1:-1;;;;;661:32:54;;;643:51;;631:2;616:18;1201:85:13;497:203:54;1995:181:48;;;;;;:::i;:::-;;:::i;5731:199::-;;;;;;:::i;:::-;;:::i;3819:202::-;;;;;;:::i;:::-;;:::i;5093:217::-;;;;;;:::i;:::-;;:::i;2581:214::-;;;;;;:::i;:::-;;:::i;3213:199::-;;;;;;:::i;:::-;;:::i;4660:219::-;;;;;;:::i;:::-;;:::i;2081:198:13:-;;;;;;:::i;:::-;;:::i;4443:211:48:-;;;;;;:::i;:::-;;:::i;4951:136::-;;;;;;:::i;:::-;;:::i;2801:222::-;1741:10;1730:7;:5;:7::i;:::-;-1:-1:-1;;;;;1730:21:48;;:51;;;-1:-1:-1;1755:26:48;719:10:20;1877:112:48;:::i;1755:26::-;1722:89;;;;-1:-1:-1;;;1722:89:48;;;;;;;:::i;:::-;;;;;;;;;2883:37:::1;:22;2913:6:::0;2883:29:::1;:37::i;:::-;2930:45;::::0;;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;2930:45:48::1;::::0;::::1;::::0;2990:26;;-1:-1:-1;;;;;2990:26:48;::::1;::::0;-1:-1:-1;;;;;;;;;;;2990:26:48;::::1;::::0;2930:45;;2990:26:::1;:::i;:::-;;;;;;;;2873:150;2801:222:::0;:::o;3687:126::-;3753:4;3776:30;:18;3799:6;3776:22;:30::i;:::-;3769:37;3687:126;-1:-1:-1;;3687:126:48:o;5601:124::-;5666:4;5689:29;:17;5711:6;5689:21;:29::i;3083:124::-;3148:4;3171:29;:17;3193:6;3171:21;:29::i;4305:132::-;4374:4;4397:33;:21;4423:6;4397:25;:33::i;3418:207::-;1741:10;1730:7;:5;:7::i;:::-;-1:-1:-1;;;;;1730:21:48;;:51;;;-1:-1:-1;1755:26:48;719:10:20;1877:112:48;:::i;1755:26::-;1722:89;;;;-1:-1:-1;;;1722:89:48;;;;;;;:::i;:::-;3495:32:::1;:17;3520:6:::0;3495:24:::1;:32::i;:::-;3537:40;::::0;;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;3537:40:48::1;::::0;::::1;::::0;3592:26;;-1:-1:-1;;;;;3592:26:48;::::1;::::0;-1:-1:-1;;;;;;;;;;;3592:26:48;::::1;::::0;3537:40;;3592:26:::1;:::i;4027:210::-:0;1741:10;1730:7;:5;:7::i;:::-;-1:-1:-1;;;;;1730:21:48;;:51;;;-1:-1:-1;1755:26:48;719:10:20;1877:112:48;:::i;1755:26::-;1722:89;;;;-1:-1:-1;;;1722:89:48;;;;;;;:::i;:::-;4105:33:::1;:18;4131:6:::0;4105:25:::1;:33::i;:::-;4148:41;::::0;;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;4148:41:48::1;::::0;::::1;::::0;4204:26;;-1:-1:-1;;;;;4204:26:48;::::1;::::0;-1:-1:-1;;;;;;;;;;;4204:26:48;::::1;::::0;4148:41;;4204:26:::1;:::i;2182:189::-:0;1741:10;1730:7;:5;:7::i;:::-;-1:-1:-1;;;;;1730:21:48;;:51;;;-1:-1:-1;1755:26:48;719:10:20;1877:112:48;:::i;1755:26::-;1722:89;;;;-1:-1:-1;;;1722:89:48;;;;;;;:::i;:::-;2253:26:::1;:11;2272:6:::0;2253:18:::1;:26::i;:::-;2289:34;::::0;;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;2289:34:48::1;::::0;::::1;::::0;2338:26;;-1:-1:-1;;;;;2338:26:48;::::1;::::0;-1:-1:-1;;;;;;;;;;;2338:26:48;::::1;::::0;2289:34;;2338:26:::1;:::i;1877:112::-:0;1936:4;1959:23;:11;1975:6;1959:15;:23::i;5316:225::-;1741:10;1730:7;:5;:7::i;:::-;-1:-1:-1;;;;;1730:21:48;;:51;;;-1:-1:-1;1755:26:48;719:10:20;1877:112:48;:::i;1755:26::-;1722:89;;;;-1:-1:-1;;;1722:89:48;;;;;;;:::i;:::-;5399:38:::1;:23;5430:6:::0;5399:30:::1;:38::i;:::-;5447:46;::::0;;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;5447:46:48::1;::::0;::::1;::::0;5508:26;;-1:-1:-1;;;;;5508:26:48;::::1;::::0;-1:-1:-1;;;;;;;;;;;5508:26:48;::::1;::::0;5447:46;;5508:26:::1;:::i;1831:101:13:-:0;1094:13;:11;:13::i;:::-;1895:30:::1;1922:1;1895:18;:30::i;:::-;1831:101::o:0;2441:134:48:-;2511:4;2534:34;:22;2561:6;2534:26;:34::i;5936:207::-;1741:10;1730:7;:5;:7::i;:::-;-1:-1:-1;;;;;1730:21:48;;:51;;;-1:-1:-1;1755:26:48;719:10:20;1877:112:48;:::i;1755:26::-;1722:89;;;;-1:-1:-1;;;1722:89:48;;;;;;;:::i;:::-;6013:32:::1;:17;6038:6:::0;6013:24:::1;:32::i;:::-;6055:40;::::0;;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;6055:40:48::1;::::0;::::1;::::0;6110:26;;-1:-1:-1;;;;;6110:26:48;::::1;::::0;-1:-1:-1;;;;;;;;;;;6110:26:48;::::1;::::0;6055:40;;6110:26:::1;:::i;1201:85:13:-:0;1247:7;1273:6;-1:-1:-1;;;;;1273:6:13;;1201:85::o;1995:181:48:-;1741:10;1730:7;:5;:7::i;:::-;-1:-1:-1;;;;;1730:21:48;;:51;;;-1:-1:-1;1755:26:48;719:10:20;1877:112:48;:::i;1755:26::-;1722:89;;;;-1:-1:-1;;;1722:89:48;;;;;;;:::i;:::-;2063:23:::1;:11;2079:6:::0;2063:15:::1;:23::i;:::-;2096:34;::::0;;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;2096:34:48::1;::::0;::::1;::::0;2145:24;;-1:-1:-1;;;;;2145:24:48;::::1;::::0;-1:-1:-1;;;;;;;;;;;2145:24:48;::::1;::::0;2096:34;;2145:24:::1;:::i;5731:199::-:0;1741:10;1730:7;:5;:7::i;:::-;-1:-1:-1;;;;;1730:21:48;;:51;;;-1:-1:-1;1755:26:48;719:10:20;1877:112:48;:::i;1755:26::-;1722:89;;;;-1:-1:-1;;;1722:89:48;;;;;;;:::i;:::-;5805:29:::1;:17;5827:6:::0;5805:21:::1;:29::i;:::-;5844:40;::::0;;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;5844:40:48::1;::::0;::::1;::::0;5899:24;;-1:-1:-1;;;;;5899:24:48;::::1;::::0;-1:-1:-1;;;;;;;;;;;5899:24:48;::::1;::::0;5844:40;;5899:24:::1;:::i;3819:202::-:0;1741:10;1730:7;:5;:7::i;:::-;-1:-1:-1;;;;;1730:21:48;;:51;;;-1:-1:-1;1755:26:48;719:10:20;1877:112:48;:::i;1755:26::-;1722:89;;;;-1:-1:-1;;;1722:89:48;;;;;;;:::i;:::-;3894:30:::1;:18;3917:6:::0;3894:22:::1;:30::i;:::-;3934:41;::::0;;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;3934:41:48::1;::::0;::::1;::::0;3990:24;;-1:-1:-1;;;;;3990:24:48;::::1;::::0;-1:-1:-1;;;;;;;;;;;3990:24:48;::::1;::::0;3934:41;;3990:24:::1;:::i;5093:217::-:0;1741:10;1730:7;:5;:7::i;:::-;-1:-1:-1;;;;;1730:21:48;;:51;;;-1:-1:-1;1755:26:48;719:10:20;1877:112:48;:::i;1755:26::-;1722:89;;;;-1:-1:-1;;;1722:89:48;;;;;;;:::i;:::-;5173:35:::1;:23;5201:6:::0;5173:27:::1;:35::i;:::-;5218:46;::::0;;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;5218:46:48::1;::::0;::::1;::::0;5279:24;;-1:-1:-1;;;;;5279:24:48;::::1;::::0;-1:-1:-1;;;;;;;;;;;5279:24:48;::::1;::::0;5218:46;;5279:24:::1;:::i;2581:214::-:0;1741:10;1730:7;:5;:7::i;:::-;-1:-1:-1;;;;;1730:21:48;;:51;;;-1:-1:-1;1755:26:48;719:10:20;1877:112:48;:::i;1755:26::-;1722:89;;;;-1:-1:-1;;;1722:89:48;;;;;;;:::i;:::-;2660:34:::1;:22;2687:6:::0;2660:26:::1;:34::i;:::-;2704:45;::::0;;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;2704:45:48::1;::::0;::::1;::::0;2764:24;;-1:-1:-1;;;;;2764:24:48;::::1;::::0;-1:-1:-1;;;;;;;;;;;2764:24:48;::::1;::::0;2704:45;;2764:24:::1;:::i;3213:199::-:0;1741:10;1730:7;:5;:7::i;:::-;-1:-1:-1;;;;;1730:21:48;;:51;;;-1:-1:-1;1755:26:48;719:10:20;1877:112:48;:::i;1755:26::-;1722:89;;;;-1:-1:-1;;;1722:89:48;;;;;;;:::i;:::-;3287:29:::1;:17;3309:6:::0;3287:21:::1;:29::i;:::-;3326:40;::::0;;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;3326:40:48::1;::::0;::::1;::::0;3381:24;;-1:-1:-1;;;;;3381:24:48;::::1;::::0;-1:-1:-1;;;;;;;;;;;3381:24:48;::::1;::::0;3326:40;;3381:24:::1;:::i;4660:219::-:0;1741:10;1730:7;:5;:7::i;:::-;-1:-1:-1;;;;;1730:21:48;;:51;;;-1:-1:-1;1755:26:48;719:10:20;1877:112:48;:::i;1755:26::-;1722:89;;;;-1:-1:-1;;;1722:89:48;;;;;;;:::i;:::-;4741:36:::1;:21;4770:6:::0;4741:28:::1;:36::i;:::-;4787:44;::::0;;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;4787:44:48::1;::::0;::::1;::::0;4846:26;;-1:-1:-1;;;;;4846:26:48;::::1;::::0;-1:-1:-1;;;;;;;;;;;4846:26:48;::::1;::::0;4787:44;;4846:26:::1;:::i;2081:198:13:-:0;1094:13;:11;:13::i;:::-;-1:-1:-1;;;;;2169:22:13;::::1;2161:73;;;::::0;-1:-1:-1;;;2161:73:13;;1814:2:54;2161:73:13::1;::::0;::::1;1796:21:54::0;1853:2;1833:18;;;1826:30;1892:34;1872:18;;;1865:62;-1:-1:-1;;;1943:18:54;;;1936:36;1989:19;;2161:73:13::1;1612:402:54::0;2161:73:13::1;2244:28;2263:8;2244:18;:28::i;:::-;2081:198:::0;:::o;4443:211:48:-;1741:10;1730:7;:5;:7::i;:::-;-1:-1:-1;;;;;1730:21:48;;:51;;;-1:-1:-1;1755:26:48;719:10:20;1877:112:48;:::i;1755:26::-;1722:89;;;;-1:-1:-1;;;1722:89:48;;;;;;;:::i;:::-;4521:33:::1;:21;4547:6:::0;4521:25:::1;:33::i;:::-;4564:44;::::0;;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;4564:44:48::1;::::0;::::1;::::0;4623:24;;-1:-1:-1;;;;;4623:24:48;::::1;::::0;-1:-1:-1;;;;;;;;;;;4623:24:48;::::1;::::0;4564:44;;4623:24:::1;:::i;4951:136::-:0;5022:4;5045:35;:23;5073:6;5045:27;:35::i;546:180:50:-;625:18;629:4;635:7;625:3;:18::i;:::-;617:64;;;;-1:-1:-1;;;617:64:50;;2221:2:54;617:64:50;;;2203:21:54;2260:2;2240:18;;;2233:30;2299:34;2279:18;;;2272:62;-1:-1:-1;;;2350:18:54;;;2343:31;2391:19;;617:64:50;2019:397:54;617:64:50;-1:-1:-1;;;;;691:20:50;714:5;691:20;;;;;;;;;;;:28;;-1:-1:-1;;691:28:50;;;546:180::o;815:200::-;887:4;-1:-1:-1;;;;;911:21:50;;903:68;;;;-1:-1:-1;;;903:68:50;;2623:2:54;903:68:50;;;2605:21:54;2662:2;2642:18;;;2635:30;2701:34;2681:18;;;2674:62;-1:-1:-1;;;2752:18:54;;;2745:32;2794:19;;903:68:50;2421:398:54;903:68:50;-1:-1:-1;;;;;;988:20:50;:11;:20;;;;;;;;;;;;;;;815:200::o;1359:130:13:-;719:10:20;1422:7:13;:5;:7::i;:::-;-1:-1:-1;;;;;1422:23:13;;1414:68;;;;-1:-1:-1;;;1414:68:13;;3026:2:54;1414:68:13;;;3008:21:54;;;3045:18;;;3038:30;3104:34;3084:18;;;3077:62;3156:18;;1414:68:13;2824:356:54;2433:187:13;2506:16;2525:6;;-1:-1:-1;;;;;2541:17:13;;;-1:-1:-1;;;;;;2541:17:13;;;;;;2573:40;;2525:6;;;;;;;2573:40;;2506:16;2573:40;2496:124;2433:187;:::o;296:175:50:-;373:18;377:4;383:7;373:3;:18::i;:::-;372:19;364:63;;;;-1:-1:-1;;;364:63:50;;3387:2:54;364:63:50;;;3369:21:54;3426:2;3406:18;;;3399:30;3465:33;3445:18;;;3438:61;3516:18;;364:63:50;3185:355:54;364:63:50;-1:-1:-1;;;;;437:20:50;:11;:20;;;;;;;;;;;:27;;-1:-1:-1;;437:27:50;460:4;437:27;;;296:175::o;14:286:54:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;168:23;;-1:-1:-1;;;;;220:31:54;;210:42;;200:70;;266:1;263;256:12;200:70;289:5;14:286;-1:-1:-1;;;14:286:54:o;705:349::-;907:2;889:21;;;946:2;926:18;;;919:30;-1:-1:-1;;;980:2:54;965:18;;958:55;1045:2;1030:18;;705:349::o;1059:548::-;1171:4;1200:2;1229;1218:9;1211:21;1261:6;1255:13;1304:6;1299:2;1288:9;1284:18;1277:34;1329:1;1339:140;1353:6;1350:1;1347:13;1339:140;;;1448:14;;;1444:23;;1438:30;1414:17;;;1433:2;1410:26;1403:66;1368:10;;1339:140;;;1343:3;1528:1;1523:2;1514:6;1503:9;1499:22;1495:31;1488:42;1598:2;1591;1587:7;1582:2;1574:6;1570:15;1566:29;1555:9;1551:45;1547:54;1539:62;;;;1059:548;;;;:::o",
  "source": "// SPDX-License-Identifier: GPL-3.0\n/**\n *     NOTICE\n *\n *     The T-REX software is licensed under a proprietary license or the GPL v.3.\n *     If you choose to receive it under the GPL v.3 license, the following applies:\n *     T-REX is a suite of smart contracts developed by Tokeny to manage and transfer financial assets on the ethereum blockchain\n *\n *     Copyright (C) 2021, Tokeny sàrl.\n *\n *     This program is free software: you can redistribute it and/or modify\n *     it under the terms of the GNU General Public License as published by\n *     the Free Software Foundation, either version 3 of the License, or\n *     (at your option) any later version.\n *\n *     This program is distributed in the hope that it will be useful,\n *     but WITHOUT ANY WARRANTY; without even the implied warranty of\n *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *     GNU General Public License for more details.\n *\n *     You should have received a copy of the GNU General Public License\n *     along with this program.  If not, see <https://www.gnu.org/licenses/>.\n */\n\npragma solidity ^0.8.0;\n\nimport '@openzeppelin/contracts/access/Ownable.sol';\n\nimport './Roles.sol';\n\ncontract OwnerRoles is Ownable {\n    using Roles for Roles.Role;\n\n    event RoleAdded(address indexed _owner, string _role);\n    event RoleRemoved(address indexed _owner, string _role);\n\n    Roles.Role private _ownerAdmin;\n    Roles.Role private _registryAddressSetter;\n    Roles.Role private _complianceSetter;\n    Roles.Role private _complianceManager;\n    Roles.Role private _claimRegistryManager;\n    Roles.Role private _issuersRegistryManager;\n    Roles.Role private _tokenInfoManager;\n\n    modifier onlyAdmin() {\n        require(owner() == msg.sender || isOwnerAdmin(_msgSender()), 'Role: Sender is NOT Admin');\n        _;\n    }\n\n    /// @dev OwnerAdmin Role _ownerAdmin\n\n    function isOwnerAdmin(address _owner) public view returns (bool) {\n        return _ownerAdmin.has(_owner);\n    }\n\n    function addOwnerAdmin(address _owner) external onlyAdmin {\n        _ownerAdmin.add(_owner);\n        string memory _role = 'OwnerAdmin';\n        emit RoleAdded(_owner, _role);\n    }\n\n    function removeOwnerAdmin(address _owner) external onlyAdmin {\n        _ownerAdmin.remove(_owner);\n        string memory _role = 'OwnerAdmin';\n        emit RoleRemoved(_owner, _role);\n    }\n\n    /// @dev RegistryAddressSetter Role _registryAddressSetter\n\n    function isRegistryAddressSetter(address _owner) public view returns (bool) {\n        return _registryAddressSetter.has(_owner);\n    }\n\n    function addRegistryAddressSetter(address _owner) external onlyAdmin {\n        _registryAddressSetter.add(_owner);\n        string memory _role = 'RegistryAddressSetter';\n        emit RoleAdded(_owner, _role);\n    }\n\n    function removeRegistryAddressSetter(address _owner) external onlyAdmin {\n        _registryAddressSetter.remove(_owner);\n        string memory _role = 'RegistryAddressSetter';\n        emit RoleRemoved(_owner, _role);\n    }\n\n    /// @dev ComplianceSetter Role _complianceSetter\n\n    function isComplianceSetter(address _owner) public view returns (bool) {\n        return _complianceSetter.has(_owner);\n    }\n\n    function addComplianceSetter(address _owner) external onlyAdmin {\n        _complianceSetter.add(_owner);\n        string memory _role = 'ComplianceSetter';\n        emit RoleAdded(_owner, _role);\n    }\n\n    function removeComplianceSetter(address _owner) external onlyAdmin {\n        _complianceSetter.remove(_owner);\n        string memory _role = 'ComplianceSetter';\n        emit RoleRemoved(_owner, _role);\n    }\n\n    /// @dev ComplianceManager Role _complianceManager\n\n    function isComplianceManager(address _owner) public view returns (bool) {\n        return _complianceManager.has(_owner);\n    }\n\n    function addComplianceManager(address _owner) external onlyAdmin {\n        _complianceManager.add(_owner);\n        string memory _role = 'ComplianceManager';\n        emit RoleAdded(_owner, _role);\n    }\n\n    function removeComplianceManager(address _owner) external onlyAdmin {\n        _complianceManager.remove(_owner);\n        string memory _role = 'ComplianceManager';\n        emit RoleRemoved(_owner, _role);\n    }\n\n    /// @dev ClaimRegistryManager Role _claimRegistryManager\n\n    function isClaimRegistryManager(address _owner) public view returns (bool) {\n        return _claimRegistryManager.has(_owner);\n    }\n\n    function addClaimRegistryManager(address _owner) external onlyAdmin {\n        _claimRegistryManager.add(_owner);\n        string memory _role = 'ClaimRegistryManager';\n        emit RoleAdded(_owner, _role);\n    }\n\n    function removeClaimRegistryManager(address _owner) external onlyAdmin {\n        _claimRegistryManager.remove(_owner);\n        string memory _role = 'ClaimRegistryManager';\n        emit RoleRemoved(_owner, _role);\n    }\n\n    /// @dev IssuersRegistryManager Role _issuersRegistryManager\n\n    function isIssuersRegistryManager(address _owner) public view returns (bool) {\n        return _issuersRegistryManager.has(_owner);\n    }\n\n    function addIssuersRegistryManager(address _owner) external onlyAdmin {\n        _issuersRegistryManager.add(_owner);\n        string memory _role = 'IssuersRegistryManager';\n        emit RoleAdded(_owner, _role);\n    }\n\n    function removeIssuersRegistryManager(address _owner) external onlyAdmin {\n        _issuersRegistryManager.remove(_owner);\n        string memory _role = 'IssuersRegistryManager';\n        emit RoleRemoved(_owner, _role);\n    }\n\n    /// @dev TokenInfoManager Role _tokenInfoManager\n\n    function isTokenInfoManager(address _owner) public view returns (bool) {\n        return _tokenInfoManager.has(_owner);\n    }\n\n    function addTokenInfoManager(address _owner) external onlyAdmin {\n        _tokenInfoManager.add(_owner);\n        string memory _role = 'TokenInfoManager';\n        emit RoleAdded(_owner, _role);\n    }\n\n    function removeTokenInfoManager(address _owner) external onlyAdmin {\n        _tokenInfoManager.remove(_owner);\n        string memory _role = 'TokenInfoManager';\n        emit RoleRemoved(_owner, _role);\n    }\n}\n",
  "sourcePath": "/home/webxpert/workspace/shipfinex/latest-repos/tokenx_smartcontract/contracts/roles/OwnerRoles.sol",
  "ast": {
    "absolutePath": "project:/contracts/roles/OwnerRoles.sol",
    "exportedSymbols": {
      "Context": [
        3401
      ],
      "Ownable": [
        2505
      ],
      "OwnerRoles": [
        11393
      ],
      "Roles": [
        11901
      ]
    },
    "id": 11394,
    "license": "GPL-3.0",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 10913,
        "literals": [
          "solidity",
          "^",
          "0.8",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "1093:23:48"
      },
      {
        "absolutePath": "@openzeppelin/contracts/access/Ownable.sol",
        "file": "@openzeppelin/contracts/access/Ownable.sol",
        "id": 10914,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 11394,
        "sourceUnit": 2506,
        "src": "1118:52:48",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "project:/contracts/roles/Roles.sol",
        "file": "./Roles.sol",
        "id": 10915,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 11394,
        "sourceUnit": 11902,
        "src": "1172:21:48",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "baseName": {
              "id": 10916,
              "name": "Ownable",
              "nameLocations": [
                "1218:7:48"
              ],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 2505,
              "src": "1218:7:48"
            },
            "id": 10917,
            "nodeType": "InheritanceSpecifier",
            "src": "1218:7:48"
          }
        ],
        "canonicalName": "OwnerRoles",
        "contractDependencies": [],
        "contractKind": "contract",
        "fullyImplemented": true,
        "id": 11393,
        "linearizedBaseContracts": [
          11393,
          2505,
          3401
        ],
        "name": "OwnerRoles",
        "nameLocation": "1204:10:48",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "global": false,
            "id": 10921,
            "libraryName": {
              "id": 10918,
              "name": "Roles",
              "nameLocations": [
                "1238:5:48"
              ],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 11901,
              "src": "1238:5:48"
            },
            "nodeType": "UsingForDirective",
            "src": "1232:27:48",
            "typeName": {
              "id": 10920,
              "nodeType": "UserDefinedTypeName",
              "pathNode": {
                "id": 10919,
                "name": "Roles.Role",
                "nameLocations": [
                  "1248:5:48",
                  "1254:4:48"
                ],
                "nodeType": "IdentifierPath",
                "referencedDeclaration": 11820,
                "src": "1248:10:48"
              },
              "referencedDeclaration": 11820,
              "src": "1248:10:48",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_Role_$11820_storage_ptr",
                "typeString": "struct Roles.Role"
              }
            }
          },
          {
            "anonymous": false,
            "eventSelector": "bfec83d64eaa953f2708271a023ab9ee82057f8f3578d548c1a4ba0b5b700489",
            "id": 10927,
            "name": "RoleAdded",
            "nameLocation": "1271:9:48",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 10926,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10923,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "_owner",
                  "nameLocation": "1297:6:48",
                  "nodeType": "VariableDeclaration",
                  "scope": 10927,
                  "src": "1281:22:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 10922,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1281:7:48",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 10925,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "_role",
                  "nameLocation": "1312:5:48",
                  "nodeType": "VariableDeclaration",
                  "scope": 10927,
                  "src": "1305:12:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 10924,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1305:6:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1280:38:48"
            },
            "src": "1265:54:48"
          },
          {
            "anonymous": false,
            "eventSelector": "d211483f91fc6eff862467f8de606587a30c8fc9981056f051b897a418df803a",
            "id": 10933,
            "name": "RoleRemoved",
            "nameLocation": "1330:11:48",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 10932,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10929,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "_owner",
                  "nameLocation": "1358:6:48",
                  "nodeType": "VariableDeclaration",
                  "scope": 10933,
                  "src": "1342:22:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 10928,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1342:7:48",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 10931,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "_role",
                  "nameLocation": "1373:5:48",
                  "nodeType": "VariableDeclaration",
                  "scope": 10933,
                  "src": "1366:12:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 10930,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1366:6:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1341:38:48"
            },
            "src": "1324:56:48"
          },
          {
            "constant": false,
            "id": 10936,
            "mutability": "mutable",
            "name": "_ownerAdmin",
            "nameLocation": "1405:11:48",
            "nodeType": "VariableDeclaration",
            "scope": 11393,
            "src": "1386:30:48",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_struct$_Role_$11820_storage",
              "typeString": "struct Roles.Role"
            },
            "typeName": {
              "id": 10935,
              "nodeType": "UserDefinedTypeName",
              "pathNode": {
                "id": 10934,
                "name": "Roles.Role",
                "nameLocations": [
                  "1386:5:48",
                  "1392:4:48"
                ],
                "nodeType": "IdentifierPath",
                "referencedDeclaration": 11820,
                "src": "1386:10:48"
              },
              "referencedDeclaration": 11820,
              "src": "1386:10:48",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_Role_$11820_storage_ptr",
                "typeString": "struct Roles.Role"
              }
            },
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 10939,
            "mutability": "mutable",
            "name": "_registryAddressSetter",
            "nameLocation": "1441:22:48",
            "nodeType": "VariableDeclaration",
            "scope": 11393,
            "src": "1422:41:48",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_struct$_Role_$11820_storage",
              "typeString": "struct Roles.Role"
            },
            "typeName": {
              "id": 10938,
              "nodeType": "UserDefinedTypeName",
              "pathNode": {
                "id": 10937,
                "name": "Roles.Role",
                "nameLocations": [
                  "1422:5:48",
                  "1428:4:48"
                ],
                "nodeType": "IdentifierPath",
                "referencedDeclaration": 11820,
                "src": "1422:10:48"
              },
              "referencedDeclaration": 11820,
              "src": "1422:10:48",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_Role_$11820_storage_ptr",
                "typeString": "struct Roles.Role"
              }
            },
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 10942,
            "mutability": "mutable",
            "name": "_complianceSetter",
            "nameLocation": "1488:17:48",
            "nodeType": "VariableDeclaration",
            "scope": 11393,
            "src": "1469:36:48",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_struct$_Role_$11820_storage",
              "typeString": "struct Roles.Role"
            },
            "typeName": {
              "id": 10941,
              "nodeType": "UserDefinedTypeName",
              "pathNode": {
                "id": 10940,
                "name": "Roles.Role",
                "nameLocations": [
                  "1469:5:48",
                  "1475:4:48"
                ],
                "nodeType": "IdentifierPath",
                "referencedDeclaration": 11820,
                "src": "1469:10:48"
              },
              "referencedDeclaration": 11820,
              "src": "1469:10:48",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_Role_$11820_storage_ptr",
                "typeString": "struct Roles.Role"
              }
            },
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 10945,
            "mutability": "mutable",
            "name": "_complianceManager",
            "nameLocation": "1530:18:48",
            "nodeType": "VariableDeclaration",
            "scope": 11393,
            "src": "1511:37:48",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_struct$_Role_$11820_storage",
              "typeString": "struct Roles.Role"
            },
            "typeName": {
              "id": 10944,
              "nodeType": "UserDefinedTypeName",
              "pathNode": {
                "id": 10943,
                "name": "Roles.Role",
                "nameLocations": [
                  "1511:5:48",
                  "1517:4:48"
                ],
                "nodeType": "IdentifierPath",
                "referencedDeclaration": 11820,
                "src": "1511:10:48"
              },
              "referencedDeclaration": 11820,
              "src": "1511:10:48",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_Role_$11820_storage_ptr",
                "typeString": "struct Roles.Role"
              }
            },
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 10948,
            "mutability": "mutable",
            "name": "_claimRegistryManager",
            "nameLocation": "1573:21:48",
            "nodeType": "VariableDeclaration",
            "scope": 11393,
            "src": "1554:40:48",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_struct$_Role_$11820_storage",
              "typeString": "struct Roles.Role"
            },
            "typeName": {
              "id": 10947,
              "nodeType": "UserDefinedTypeName",
              "pathNode": {
                "id": 10946,
                "name": "Roles.Role",
                "nameLocations": [
                  "1554:5:48",
                  "1560:4:48"
                ],
                "nodeType": "IdentifierPath",
                "referencedDeclaration": 11820,
                "src": "1554:10:48"
              },
              "referencedDeclaration": 11820,
              "src": "1554:10:48",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_Role_$11820_storage_ptr",
                "typeString": "struct Roles.Role"
              }
            },
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 10951,
            "mutability": "mutable",
            "name": "_issuersRegistryManager",
            "nameLocation": "1619:23:48",
            "nodeType": "VariableDeclaration",
            "scope": 11393,
            "src": "1600:42:48",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_struct$_Role_$11820_storage",
              "typeString": "struct Roles.Role"
            },
            "typeName": {
              "id": 10950,
              "nodeType": "UserDefinedTypeName",
              "pathNode": {
                "id": 10949,
                "name": "Roles.Role",
                "nameLocations": [
                  "1600:5:48",
                  "1606:4:48"
                ],
                "nodeType": "IdentifierPath",
                "referencedDeclaration": 11820,
                "src": "1600:10:48"
              },
              "referencedDeclaration": 11820,
              "src": "1600:10:48",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_Role_$11820_storage_ptr",
                "typeString": "struct Roles.Role"
              }
            },
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 10954,
            "mutability": "mutable",
            "name": "_tokenInfoManager",
            "nameLocation": "1667:17:48",
            "nodeType": "VariableDeclaration",
            "scope": 11393,
            "src": "1648:36:48",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_struct$_Role_$11820_storage",
              "typeString": "struct Roles.Role"
            },
            "typeName": {
              "id": 10953,
              "nodeType": "UserDefinedTypeName",
              "pathNode": {
                "id": 10952,
                "name": "Roles.Role",
                "nameLocations": [
                  "1648:5:48",
                  "1654:4:48"
                ],
                "nodeType": "IdentifierPath",
                "referencedDeclaration": 11820,
                "src": "1648:10:48"
              },
              "referencedDeclaration": 11820,
              "src": "1648:10:48",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_Role_$11820_storage_ptr",
                "typeString": "struct Roles.Role"
              }
            },
            "visibility": "private"
          },
          {
            "body": {
              "id": 10971,
              "nodeType": "Block",
              "src": "1712:117:48",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 10966,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 10961,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 10957,
                              "name": "owner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2433,
                              "src": "1730:5:48",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                                "typeString": "function () view returns (address)"
                              }
                            },
                            "id": 10958,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1730:7:48",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "expression": {
                              "id": 10959,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4294967281,
                              "src": "1741:3:48",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 10960,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "1745:6:48",
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "src": "1741:10:48",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "1730:21:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "||",
                        "rightExpression": {
                          "arguments": [
                            {
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "id": 10963,
                                "name": "_msgSender",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3391,
                                "src": "1768:10:48",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                                  "typeString": "function () view returns (address)"
                                }
                              },
                              "id": 10964,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1768:12:48",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 10962,
                            "name": "isOwnerAdmin",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10986,
                            "src": "1755:12:48",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                              "typeString": "function (address) view returns (bool)"
                            }
                          },
                          "id": 10965,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1755:26:48",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "1730:51:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "526f6c653a2053656e646572206973204e4f542041646d696e",
                        "id": 10967,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1783:27:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_e0747ebade9609a75d2f7261d19516256a9edb89fa8d2c0d89fd74d44bfd7b24",
                          "typeString": "literal_string \"Role: Sender is NOT Admin\""
                        },
                        "value": "Role: Sender is NOT Admin"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_e0747ebade9609a75d2f7261d19516256a9edb89fa8d2c0d89fd74d44bfd7b24",
                          "typeString": "literal_string \"Role: Sender is NOT Admin\""
                        }
                      ],
                      "id": 10956,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "1722:7:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 10968,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1722:89:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 10969,
                  "nodeType": "ExpressionStatement",
                  "src": "1722:89:48"
                },
                {
                  "id": 10970,
                  "nodeType": "PlaceholderStatement",
                  "src": "1821:1:48"
                }
              ]
            },
            "id": 10972,
            "name": "onlyAdmin",
            "nameLocation": "1700:9:48",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 10955,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1709:2:48"
            },
            "src": "1691:138:48",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 10985,
              "nodeType": "Block",
              "src": "1942:47:48",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 10982,
                        "name": "_owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10975,
                        "src": "1975:6:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 10980,
                        "name": "_ownerAdmin",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10936,
                        "src": "1959:11:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$11820_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 10981,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "1971:3:48",
                      "memberName": "has",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11900,
                      "src": "1959:15:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_Role_$11820_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_Role_$11820_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address) view returns (bool)"
                      }
                    },
                    "id": 10983,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1959:23:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 10979,
                  "id": 10984,
                  "nodeType": "Return",
                  "src": "1952:30:48"
                }
              ]
            },
            "documentation": {
              "id": 10973,
              "nodeType": "StructuredDocumentation",
              "src": "1835:37:48",
              "text": "@dev OwnerAdmin Role _ownerAdmin"
            },
            "functionSelector": "62cdd482",
            "id": 10986,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isOwnerAdmin",
            "nameLocation": "1886:12:48",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 10976,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10975,
                  "mutability": "mutable",
                  "name": "_owner",
                  "nameLocation": "1907:6:48",
                  "nodeType": "VariableDeclaration",
                  "scope": 10986,
                  "src": "1899:14:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 10974,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1899:7:48",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1898:16:48"
            },
            "returnParameters": {
              "id": 10979,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10978,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 10986,
                  "src": "1936:4:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 10977,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "1936:4:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1935:6:48"
            },
            "scope": 11393,
            "src": "1877:112:48",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 11008,
              "nodeType": "Block",
              "src": "2053:123:48",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 10996,
                        "name": "_owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10988,
                        "src": "2079:6:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 10993,
                        "name": "_ownerAdmin",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10936,
                        "src": "2063:11:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$11820_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 10995,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "2075:3:48",
                      "memberName": "add",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11847,
                      "src": "2063:15:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$11820_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$11820_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address)"
                      }
                    },
                    "id": 10997,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2063:23:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 10998,
                  "nodeType": "ExpressionStatement",
                  "src": "2063:23:48"
                },
                {
                  "assignments": [
                    11000
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 11000,
                      "mutability": "mutable",
                      "name": "_role",
                      "nameLocation": "2110:5:48",
                      "nodeType": "VariableDeclaration",
                      "scope": 11008,
                      "src": "2096:19:48",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string"
                      },
                      "typeName": {
                        "id": 10999,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "2096:6:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage_ptr",
                          "typeString": "string"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 11002,
                  "initialValue": {
                    "hexValue": "4f776e657241646d696e",
                    "id": 11001,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "2118:12:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_62f6115f5014ec4c7779a85e6faeeed00d502986df89a71123d083cdc949ae20",
                      "typeString": "literal_string \"OwnerAdmin\""
                    },
                    "value": "OwnerAdmin"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2096:34:48"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 11004,
                        "name": "_owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10988,
                        "src": "2155:6:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 11005,
                        "name": "_role",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11000,
                        "src": "2163:5:48",
                        "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": 11003,
                      "name": "RoleAdded",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10927,
                      "src": "2145:9:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (address,string memory)"
                      }
                    },
                    "id": 11006,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2145:24:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 11007,
                  "nodeType": "EmitStatement",
                  "src": "2140:29:48"
                }
              ]
            },
            "functionSelector": "934b2da4",
            "id": 11009,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 10991,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 10990,
                  "name": "onlyAdmin",
                  "nameLocations": [
                    "2043:9:48"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 10972,
                  "src": "2043:9:48"
                },
                "nodeType": "ModifierInvocation",
                "src": "2043:9:48"
              }
            ],
            "name": "addOwnerAdmin",
            "nameLocation": "2004:13:48",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 10989,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10988,
                  "mutability": "mutable",
                  "name": "_owner",
                  "nameLocation": "2026:6:48",
                  "nodeType": "VariableDeclaration",
                  "scope": 11009,
                  "src": "2018:14:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 10987,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2018:7:48",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2017:16:48"
            },
            "returnParameters": {
              "id": 10992,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2053:0:48"
            },
            "scope": 11393,
            "src": "1995:181:48",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 11031,
              "nodeType": "Block",
              "src": "2243:128:48",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 11019,
                        "name": "_owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11011,
                        "src": "2272:6:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 11016,
                        "name": "_ownerAdmin",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10936,
                        "src": "2253:11:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$11820_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 11018,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "2265:6:48",
                      "memberName": "remove",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11873,
                      "src": "2253:18:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$11820_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$11820_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address)"
                      }
                    },
                    "id": 11020,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2253:26:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 11021,
                  "nodeType": "ExpressionStatement",
                  "src": "2253:26:48"
                },
                {
                  "assignments": [
                    11023
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 11023,
                      "mutability": "mutable",
                      "name": "_role",
                      "nameLocation": "2303:5:48",
                      "nodeType": "VariableDeclaration",
                      "scope": 11031,
                      "src": "2289:19:48",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string"
                      },
                      "typeName": {
                        "id": 11022,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "2289:6:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage_ptr",
                          "typeString": "string"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 11025,
                  "initialValue": {
                    "hexValue": "4f776e657241646d696e",
                    "id": 11024,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "2311:12:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_62f6115f5014ec4c7779a85e6faeeed00d502986df89a71123d083cdc949ae20",
                      "typeString": "literal_string \"OwnerAdmin\""
                    },
                    "value": "OwnerAdmin"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2289:34:48"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 11027,
                        "name": "_owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11011,
                        "src": "2350:6:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 11028,
                        "name": "_role",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11023,
                        "src": "2358:5:48",
                        "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": 11026,
                      "name": "RoleRemoved",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10933,
                      "src": "2338:11:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (address,string memory)"
                      }
                    },
                    "id": 11029,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2338:26:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 11030,
                  "nodeType": "EmitStatement",
                  "src": "2333:31:48"
                }
              ]
            },
            "functionSelector": "54b9797f",
            "id": 11032,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 11014,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 11013,
                  "name": "onlyAdmin",
                  "nameLocations": [
                    "2233:9:48"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 10972,
                  "src": "2233:9:48"
                },
                "nodeType": "ModifierInvocation",
                "src": "2233:9:48"
              }
            ],
            "name": "removeOwnerAdmin",
            "nameLocation": "2191:16:48",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 11012,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11011,
                  "mutability": "mutable",
                  "name": "_owner",
                  "nameLocation": "2216:6:48",
                  "nodeType": "VariableDeclaration",
                  "scope": 11032,
                  "src": "2208:14:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 11010,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2208:7:48",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2207:16:48"
            },
            "returnParameters": {
              "id": 11015,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2243:0:48"
            },
            "scope": 11393,
            "src": "2182:189:48",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 11045,
              "nodeType": "Block",
              "src": "2517:58:48",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 11042,
                        "name": "_owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11035,
                        "src": "2561:6:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 11040,
                        "name": "_registryAddressSetter",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10939,
                        "src": "2534:22:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$11820_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 11041,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "2557:3:48",
                      "memberName": "has",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11900,
                      "src": "2534:26:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_Role_$11820_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_Role_$11820_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address) view returns (bool)"
                      }
                    },
                    "id": 11043,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2534:34:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 11039,
                  "id": 11044,
                  "nodeType": "Return",
                  "src": "2527:41:48"
                }
              ]
            },
            "documentation": {
              "id": 11033,
              "nodeType": "StructuredDocumentation",
              "src": "2377:59:48",
              "text": "@dev RegistryAddressSetter Role _registryAddressSetter"
            },
            "functionSelector": "82870937",
            "id": 11046,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isRegistryAddressSetter",
            "nameLocation": "2450:23:48",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 11036,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11035,
                  "mutability": "mutable",
                  "name": "_owner",
                  "nameLocation": "2482:6:48",
                  "nodeType": "VariableDeclaration",
                  "scope": 11046,
                  "src": "2474:14:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 11034,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2474:7:48",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2473:16:48"
            },
            "returnParameters": {
              "id": 11039,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11038,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 11046,
                  "src": "2511:4:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 11037,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "2511:4:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2510:6:48"
            },
            "scope": 11393,
            "src": "2441:134:48",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 11068,
              "nodeType": "Block",
              "src": "2650:145:48",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 11056,
                        "name": "_owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11048,
                        "src": "2687:6:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 11053,
                        "name": "_registryAddressSetter",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10939,
                        "src": "2660:22:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$11820_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 11055,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "2683:3:48",
                      "memberName": "add",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11847,
                      "src": "2660:26:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$11820_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$11820_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address)"
                      }
                    },
                    "id": 11057,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2660:34:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 11058,
                  "nodeType": "ExpressionStatement",
                  "src": "2660:34:48"
                },
                {
                  "assignments": [
                    11060
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 11060,
                      "mutability": "mutable",
                      "name": "_role",
                      "nameLocation": "2718:5:48",
                      "nodeType": "VariableDeclaration",
                      "scope": 11068,
                      "src": "2704:19:48",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string"
                      },
                      "typeName": {
                        "id": 11059,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "2704:6:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage_ptr",
                          "typeString": "string"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 11062,
                  "initialValue": {
                    "hexValue": "526567697374727941646472657373536574746572",
                    "id": 11061,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "2726:23:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_d36b1bd9a1ba0efa6f97342f527f05c039b454f231dbfda5f7154cab5ce868eb",
                      "typeString": "literal_string \"RegistryAddressSetter\""
                    },
                    "value": "RegistryAddressSetter"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2704:45:48"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 11064,
                        "name": "_owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11048,
                        "src": "2774:6:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 11065,
                        "name": "_role",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11060,
                        "src": "2782:5:48",
                        "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": 11063,
                      "name": "RoleAdded",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10927,
                      "src": "2764:9:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (address,string memory)"
                      }
                    },
                    "id": 11066,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2764:24:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 11067,
                  "nodeType": "EmitStatement",
                  "src": "2759:29:48"
                }
              ]
            },
            "functionSelector": "ae5aaa3b",
            "id": 11069,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 11051,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 11050,
                  "name": "onlyAdmin",
                  "nameLocations": [
                    "2640:9:48"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 10972,
                  "src": "2640:9:48"
                },
                "nodeType": "ModifierInvocation",
                "src": "2640:9:48"
              }
            ],
            "name": "addRegistryAddressSetter",
            "nameLocation": "2590:24:48",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 11049,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11048,
                  "mutability": "mutable",
                  "name": "_owner",
                  "nameLocation": "2623:6:48",
                  "nodeType": "VariableDeclaration",
                  "scope": 11069,
                  "src": "2615:14:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 11047,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2615:7:48",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2614:16:48"
            },
            "returnParameters": {
              "id": 11052,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2650:0:48"
            },
            "scope": 11393,
            "src": "2581:214:48",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 11091,
              "nodeType": "Block",
              "src": "2873:150:48",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 11079,
                        "name": "_owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11071,
                        "src": "2913:6:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 11076,
                        "name": "_registryAddressSetter",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10939,
                        "src": "2883:22:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$11820_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 11078,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "2906:6:48",
                      "memberName": "remove",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11873,
                      "src": "2883:29:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$11820_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$11820_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address)"
                      }
                    },
                    "id": 11080,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2883:37:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 11081,
                  "nodeType": "ExpressionStatement",
                  "src": "2883:37:48"
                },
                {
                  "assignments": [
                    11083
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 11083,
                      "mutability": "mutable",
                      "name": "_role",
                      "nameLocation": "2944:5:48",
                      "nodeType": "VariableDeclaration",
                      "scope": 11091,
                      "src": "2930:19:48",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string"
                      },
                      "typeName": {
                        "id": 11082,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "2930:6:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage_ptr",
                          "typeString": "string"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 11085,
                  "initialValue": {
                    "hexValue": "526567697374727941646472657373536574746572",
                    "id": 11084,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "2952:23:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_d36b1bd9a1ba0efa6f97342f527f05c039b454f231dbfda5f7154cab5ce868eb",
                      "typeString": "literal_string \"RegistryAddressSetter\""
                    },
                    "value": "RegistryAddressSetter"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2930:45:48"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 11087,
                        "name": "_owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11071,
                        "src": "3002:6:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 11088,
                        "name": "_role",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11083,
                        "src": "3010:5:48",
                        "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": 11086,
                      "name": "RoleRemoved",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10933,
                      "src": "2990:11:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (address,string memory)"
                      }
                    },
                    "id": 11089,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2990:26:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 11090,
                  "nodeType": "EmitStatement",
                  "src": "2985:31:48"
                }
              ]
            },
            "functionSelector": "039ec2cd",
            "id": 11092,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 11074,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 11073,
                  "name": "onlyAdmin",
                  "nameLocations": [
                    "2863:9:48"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 10972,
                  "src": "2863:9:48"
                },
                "nodeType": "ModifierInvocation",
                "src": "2863:9:48"
              }
            ],
            "name": "removeRegistryAddressSetter",
            "nameLocation": "2810:27:48",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 11072,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11071,
                  "mutability": "mutable",
                  "name": "_owner",
                  "nameLocation": "2846:6:48",
                  "nodeType": "VariableDeclaration",
                  "scope": 11092,
                  "src": "2838:14:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 11070,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2838:7:48",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2837:16:48"
            },
            "returnParameters": {
              "id": 11075,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2873:0:48"
            },
            "scope": 11393,
            "src": "2801:222:48",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 11105,
              "nodeType": "Block",
              "src": "3154:53:48",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 11102,
                        "name": "_owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11095,
                        "src": "3193:6:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 11100,
                        "name": "_complianceSetter",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10942,
                        "src": "3171:17:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$11820_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 11101,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "3189:3:48",
                      "memberName": "has",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11900,
                      "src": "3171:21:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_Role_$11820_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_Role_$11820_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address) view returns (bool)"
                      }
                    },
                    "id": 11103,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3171:29:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 11099,
                  "id": 11104,
                  "nodeType": "Return",
                  "src": "3164:36:48"
                }
              ]
            },
            "documentation": {
              "id": 11093,
              "nodeType": "StructuredDocumentation",
              "src": "3029:49:48",
              "text": "@dev ComplianceSetter Role _complianceSetter"
            },
            "functionSelector": "3ba7c75e",
            "id": 11106,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isComplianceSetter",
            "nameLocation": "3092:18:48",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 11096,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11095,
                  "mutability": "mutable",
                  "name": "_owner",
                  "nameLocation": "3119:6:48",
                  "nodeType": "VariableDeclaration",
                  "scope": 11106,
                  "src": "3111:14:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 11094,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3111:7:48",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3110:16:48"
            },
            "returnParameters": {
              "id": 11099,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11098,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 11106,
                  "src": "3148:4:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 11097,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "3148:4:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3147:6:48"
            },
            "scope": 11393,
            "src": "3083:124:48",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 11128,
              "nodeType": "Block",
              "src": "3277:135:48",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 11116,
                        "name": "_owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11108,
                        "src": "3309:6:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 11113,
                        "name": "_complianceSetter",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10942,
                        "src": "3287:17:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$11820_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 11115,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "3305:3:48",
                      "memberName": "add",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11847,
                      "src": "3287:21:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$11820_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$11820_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address)"
                      }
                    },
                    "id": 11117,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3287:29:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 11118,
                  "nodeType": "ExpressionStatement",
                  "src": "3287:29:48"
                },
                {
                  "assignments": [
                    11120
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 11120,
                      "mutability": "mutable",
                      "name": "_role",
                      "nameLocation": "3340:5:48",
                      "nodeType": "VariableDeclaration",
                      "scope": 11128,
                      "src": "3326:19:48",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string"
                      },
                      "typeName": {
                        "id": 11119,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "3326:6:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage_ptr",
                          "typeString": "string"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 11122,
                  "initialValue": {
                    "hexValue": "436f6d706c69616e6365536574746572",
                    "id": 11121,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "3348:18:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_ed6524002f16c16bbf414c8294754fb908e5ee1ecc0465a5e1e68a1a54c295bf",
                      "typeString": "literal_string \"ComplianceSetter\""
                    },
                    "value": "ComplianceSetter"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3326:40:48"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 11124,
                        "name": "_owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11108,
                        "src": "3391:6:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 11125,
                        "name": "_role",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11120,
                        "src": "3399:5:48",
                        "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": 11123,
                      "name": "RoleAdded",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10927,
                      "src": "3381:9:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (address,string memory)"
                      }
                    },
                    "id": 11126,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3381:24:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 11127,
                  "nodeType": "EmitStatement",
                  "src": "3376:29:48"
                }
              ]
            },
            "functionSelector": "ce4bdac7",
            "id": 11129,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 11111,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 11110,
                  "name": "onlyAdmin",
                  "nameLocations": [
                    "3267:9:48"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 10972,
                  "src": "3267:9:48"
                },
                "nodeType": "ModifierInvocation",
                "src": "3267:9:48"
              }
            ],
            "name": "addComplianceSetter",
            "nameLocation": "3222:19:48",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 11109,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11108,
                  "mutability": "mutable",
                  "name": "_owner",
                  "nameLocation": "3250:6:48",
                  "nodeType": "VariableDeclaration",
                  "scope": 11129,
                  "src": "3242:14:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 11107,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3242:7:48",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3241:16:48"
            },
            "returnParameters": {
              "id": 11112,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3277:0:48"
            },
            "scope": 11393,
            "src": "3213:199:48",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 11151,
              "nodeType": "Block",
              "src": "3485:140:48",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 11139,
                        "name": "_owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11131,
                        "src": "3520:6:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 11136,
                        "name": "_complianceSetter",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10942,
                        "src": "3495:17:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$11820_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 11138,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "3513:6:48",
                      "memberName": "remove",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11873,
                      "src": "3495:24:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$11820_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$11820_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address)"
                      }
                    },
                    "id": 11140,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3495:32:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 11141,
                  "nodeType": "ExpressionStatement",
                  "src": "3495:32:48"
                },
                {
                  "assignments": [
                    11143
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 11143,
                      "mutability": "mutable",
                      "name": "_role",
                      "nameLocation": "3551:5:48",
                      "nodeType": "VariableDeclaration",
                      "scope": 11151,
                      "src": "3537:19:48",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string"
                      },
                      "typeName": {
                        "id": 11142,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "3537:6:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage_ptr",
                          "typeString": "string"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 11145,
                  "initialValue": {
                    "hexValue": "436f6d706c69616e6365536574746572",
                    "id": 11144,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "3559:18:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_ed6524002f16c16bbf414c8294754fb908e5ee1ecc0465a5e1e68a1a54c295bf",
                      "typeString": "literal_string \"ComplianceSetter\""
                    },
                    "value": "ComplianceSetter"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3537:40:48"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 11147,
                        "name": "_owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11131,
                        "src": "3604:6:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 11148,
                        "name": "_role",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11143,
                        "src": "3612:5:48",
                        "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": 11146,
                      "name": "RoleRemoved",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10933,
                      "src": "3592:11:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (address,string memory)"
                      }
                    },
                    "id": 11149,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3592:26:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 11150,
                  "nodeType": "EmitStatement",
                  "src": "3587:31:48"
                }
              ]
            },
            "functionSelector": "40522554",
            "id": 11152,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 11134,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 11133,
                  "name": "onlyAdmin",
                  "nameLocations": [
                    "3475:9:48"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 10972,
                  "src": "3475:9:48"
                },
                "nodeType": "ModifierInvocation",
                "src": "3475:9:48"
              }
            ],
            "name": "removeComplianceSetter",
            "nameLocation": "3427:22:48",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 11132,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11131,
                  "mutability": "mutable",
                  "name": "_owner",
                  "nameLocation": "3458:6:48",
                  "nodeType": "VariableDeclaration",
                  "scope": 11152,
                  "src": "3450:14:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 11130,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3450:7:48",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3449:16:48"
            },
            "returnParameters": {
              "id": 11135,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3485:0:48"
            },
            "scope": 11393,
            "src": "3418:207:48",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 11165,
              "nodeType": "Block",
              "src": "3759:54:48",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 11162,
                        "name": "_owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11155,
                        "src": "3799:6:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 11160,
                        "name": "_complianceManager",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10945,
                        "src": "3776:18:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$11820_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 11161,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "3795:3:48",
                      "memberName": "has",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11900,
                      "src": "3776:22:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_Role_$11820_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_Role_$11820_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address) view returns (bool)"
                      }
                    },
                    "id": 11163,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3776:30:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 11159,
                  "id": 11164,
                  "nodeType": "Return",
                  "src": "3769:37:48"
                }
              ]
            },
            "documentation": {
              "id": 11153,
              "nodeType": "StructuredDocumentation",
              "src": "3631:51:48",
              "text": "@dev ComplianceManager Role _complianceManager"
            },
            "functionSelector": "03ff5014",
            "id": 11166,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isComplianceManager",
            "nameLocation": "3696:19:48",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 11156,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11155,
                  "mutability": "mutable",
                  "name": "_owner",
                  "nameLocation": "3724:6:48",
                  "nodeType": "VariableDeclaration",
                  "scope": 11166,
                  "src": "3716:14:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 11154,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3716:7:48",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3715:16:48"
            },
            "returnParameters": {
              "id": 11159,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11158,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 11166,
                  "src": "3753:4:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 11157,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "3753:4:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3752:6:48"
            },
            "scope": 11393,
            "src": "3687:126:48",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 11188,
              "nodeType": "Block",
              "src": "3884:137:48",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 11176,
                        "name": "_owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11168,
                        "src": "3917:6:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 11173,
                        "name": "_complianceManager",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10945,
                        "src": "3894:18:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$11820_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 11175,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "3913:3:48",
                      "memberName": "add",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11847,
                      "src": "3894:22:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$11820_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$11820_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address)"
                      }
                    },
                    "id": 11177,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3894:30:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 11178,
                  "nodeType": "ExpressionStatement",
                  "src": "3894:30:48"
                },
                {
                  "assignments": [
                    11180
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 11180,
                      "mutability": "mutable",
                      "name": "_role",
                      "nameLocation": "3948:5:48",
                      "nodeType": "VariableDeclaration",
                      "scope": 11188,
                      "src": "3934:19:48",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string"
                      },
                      "typeName": {
                        "id": 11179,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "3934:6:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage_ptr",
                          "typeString": "string"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 11182,
                  "initialValue": {
                    "hexValue": "436f6d706c69616e63654d616e61676572",
                    "id": 11181,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "3956:19:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_254e7cd2e65e9e5a77daee359665480f1315c457306b8a094a0a595983cd15fe",
                      "typeString": "literal_string \"ComplianceManager\""
                    },
                    "value": "ComplianceManager"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3934:41:48"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 11184,
                        "name": "_owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11168,
                        "src": "4000:6:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 11185,
                        "name": "_role",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11180,
                        "src": "4008:5:48",
                        "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": 11183,
                      "name": "RoleAdded",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10927,
                      "src": "3990:9:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (address,string memory)"
                      }
                    },
                    "id": 11186,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3990:24:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 11187,
                  "nodeType": "EmitStatement",
                  "src": "3985:29:48"
                }
              ]
            },
            "functionSelector": "a66bcc1c",
            "id": 11189,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 11171,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 11170,
                  "name": "onlyAdmin",
                  "nameLocations": [
                    "3874:9:48"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 10972,
                  "src": "3874:9:48"
                },
                "nodeType": "ModifierInvocation",
                "src": "3874:9:48"
              }
            ],
            "name": "addComplianceManager",
            "nameLocation": "3828:20:48",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 11169,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11168,
                  "mutability": "mutable",
                  "name": "_owner",
                  "nameLocation": "3857:6:48",
                  "nodeType": "VariableDeclaration",
                  "scope": 11189,
                  "src": "3849:14:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 11167,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3849:7:48",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3848:16:48"
            },
            "returnParameters": {
              "id": 11172,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3884:0:48"
            },
            "scope": 11393,
            "src": "3819:202:48",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 11211,
              "nodeType": "Block",
              "src": "4095:142:48",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 11199,
                        "name": "_owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11191,
                        "src": "4131:6:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 11196,
                        "name": "_complianceManager",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10945,
                        "src": "4105:18:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$11820_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 11198,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "4124:6:48",
                      "memberName": "remove",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11873,
                      "src": "4105:25:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$11820_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$11820_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address)"
                      }
                    },
                    "id": 11200,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4105:33:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 11201,
                  "nodeType": "ExpressionStatement",
                  "src": "4105:33:48"
                },
                {
                  "assignments": [
                    11203
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 11203,
                      "mutability": "mutable",
                      "name": "_role",
                      "nameLocation": "4162:5:48",
                      "nodeType": "VariableDeclaration",
                      "scope": 11211,
                      "src": "4148:19:48",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string"
                      },
                      "typeName": {
                        "id": 11202,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "4148:6:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage_ptr",
                          "typeString": "string"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 11205,
                  "initialValue": {
                    "hexValue": "436f6d706c69616e63654d616e61676572",
                    "id": 11204,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "4170:19:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_254e7cd2e65e9e5a77daee359665480f1315c457306b8a094a0a595983cd15fe",
                      "typeString": "literal_string \"ComplianceManager\""
                    },
                    "value": "ComplianceManager"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4148:41:48"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 11207,
                        "name": "_owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11191,
                        "src": "4216:6:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 11208,
                        "name": "_role",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11203,
                        "src": "4224:5:48",
                        "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": 11206,
                      "name": "RoleRemoved",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10933,
                      "src": "4204:11:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (address,string memory)"
                      }
                    },
                    "id": 11209,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4204:26:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 11210,
                  "nodeType": "EmitStatement",
                  "src": "4199:31:48"
                }
              ]
            },
            "functionSelector": "46b686f8",
            "id": 11212,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 11194,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 11193,
                  "name": "onlyAdmin",
                  "nameLocations": [
                    "4085:9:48"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 10972,
                  "src": "4085:9:48"
                },
                "nodeType": "ModifierInvocation",
                "src": "4085:9:48"
              }
            ],
            "name": "removeComplianceManager",
            "nameLocation": "4036:23:48",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 11192,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11191,
                  "mutability": "mutable",
                  "name": "_owner",
                  "nameLocation": "4068:6:48",
                  "nodeType": "VariableDeclaration",
                  "scope": 11212,
                  "src": "4060:14:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 11190,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4060:7:48",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4059:16:48"
            },
            "returnParameters": {
              "id": 11195,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4095:0:48"
            },
            "scope": 11393,
            "src": "4027:210:48",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 11225,
              "nodeType": "Block",
              "src": "4380:57:48",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 11222,
                        "name": "_owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11215,
                        "src": "4423:6:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 11220,
                        "name": "_claimRegistryManager",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10948,
                        "src": "4397:21:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$11820_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 11221,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "4419:3:48",
                      "memberName": "has",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11900,
                      "src": "4397:25:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_Role_$11820_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_Role_$11820_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address) view returns (bool)"
                      }
                    },
                    "id": 11223,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4397:33:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 11219,
                  "id": 11224,
                  "nodeType": "Return",
                  "src": "4390:40:48"
                }
              ]
            },
            "documentation": {
              "id": 11213,
              "nodeType": "StructuredDocumentation",
              "src": "4243:57:48",
              "text": "@dev ClaimRegistryManager Role _claimRegistryManager"
            },
            "functionSelector": "3c734ce8",
            "id": 11226,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isClaimRegistryManager",
            "nameLocation": "4314:22:48",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 11216,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11215,
                  "mutability": "mutable",
                  "name": "_owner",
                  "nameLocation": "4345:6:48",
                  "nodeType": "VariableDeclaration",
                  "scope": 11226,
                  "src": "4337:14:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 11214,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4337:7:48",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4336:16:48"
            },
            "returnParameters": {
              "id": 11219,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11218,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 11226,
                  "src": "4374:4:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 11217,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "4374:4:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4373:6:48"
            },
            "scope": 11393,
            "src": "4305:132:48",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 11248,
              "nodeType": "Block",
              "src": "4511:143:48",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 11236,
                        "name": "_owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11228,
                        "src": "4547:6:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 11233,
                        "name": "_claimRegistryManager",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10948,
                        "src": "4521:21:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$11820_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 11235,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "4543:3:48",
                      "memberName": "add",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11847,
                      "src": "4521:25:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$11820_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$11820_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address)"
                      }
                    },
                    "id": 11237,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4521:33:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 11238,
                  "nodeType": "ExpressionStatement",
                  "src": "4521:33:48"
                },
                {
                  "assignments": [
                    11240
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 11240,
                      "mutability": "mutable",
                      "name": "_role",
                      "nameLocation": "4578:5:48",
                      "nodeType": "VariableDeclaration",
                      "scope": 11248,
                      "src": "4564:19:48",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string"
                      },
                      "typeName": {
                        "id": 11239,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "4564:6:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage_ptr",
                          "typeString": "string"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 11242,
                  "initialValue": {
                    "hexValue": "436c61696d52656769737472794d616e61676572",
                    "id": 11241,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "4586:22:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_804b13390a9f6375b6730e205cffe19efc5e8de8596f5fb70d3a146015955e7d",
                      "typeString": "literal_string \"ClaimRegistryManager\""
                    },
                    "value": "ClaimRegistryManager"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4564:44:48"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 11244,
                        "name": "_owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11228,
                        "src": "4633:6:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 11245,
                        "name": "_role",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11240,
                        "src": "4641:5:48",
                        "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": 11243,
                      "name": "RoleAdded",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10927,
                      "src": "4623:9:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (address,string memory)"
                      }
                    },
                    "id": 11246,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4623:24:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 11247,
                  "nodeType": "EmitStatement",
                  "src": "4618:29:48"
                }
              ]
            },
            "functionSelector": "faed696a",
            "id": 11249,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 11231,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 11230,
                  "name": "onlyAdmin",
                  "nameLocations": [
                    "4501:9:48"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 10972,
                  "src": "4501:9:48"
                },
                "nodeType": "ModifierInvocation",
                "src": "4501:9:48"
              }
            ],
            "name": "addClaimRegistryManager",
            "nameLocation": "4452:23:48",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 11229,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11228,
                  "mutability": "mutable",
                  "name": "_owner",
                  "nameLocation": "4484:6:48",
                  "nodeType": "VariableDeclaration",
                  "scope": 11249,
                  "src": "4476:14:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 11227,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4476:7:48",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4475:16:48"
            },
            "returnParameters": {
              "id": 11232,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4511:0:48"
            },
            "scope": 11393,
            "src": "4443:211:48",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 11271,
              "nodeType": "Block",
              "src": "4731:148:48",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 11259,
                        "name": "_owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11251,
                        "src": "4770:6:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 11256,
                        "name": "_claimRegistryManager",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10948,
                        "src": "4741:21:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$11820_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 11258,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "4763:6:48",
                      "memberName": "remove",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11873,
                      "src": "4741:28:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$11820_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$11820_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address)"
                      }
                    },
                    "id": 11260,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4741:36:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 11261,
                  "nodeType": "ExpressionStatement",
                  "src": "4741:36:48"
                },
                {
                  "assignments": [
                    11263
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 11263,
                      "mutability": "mutable",
                      "name": "_role",
                      "nameLocation": "4801:5:48",
                      "nodeType": "VariableDeclaration",
                      "scope": 11271,
                      "src": "4787:19:48",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string"
                      },
                      "typeName": {
                        "id": 11262,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "4787:6:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage_ptr",
                          "typeString": "string"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 11265,
                  "initialValue": {
                    "hexValue": "436c61696d52656769737472794d616e61676572",
                    "id": 11264,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "4809:22:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_804b13390a9f6375b6730e205cffe19efc5e8de8596f5fb70d3a146015955e7d",
                      "typeString": "literal_string \"ClaimRegistryManager\""
                    },
                    "value": "ClaimRegistryManager"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4787:44:48"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 11267,
                        "name": "_owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11251,
                        "src": "4858:6:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 11268,
                        "name": "_role",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11263,
                        "src": "4866:5:48",
                        "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": 11266,
                      "name": "RoleRemoved",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10933,
                      "src": "4846:11:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (address,string memory)"
                      }
                    },
                    "id": 11269,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4846:26:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 11270,
                  "nodeType": "EmitStatement",
                  "src": "4841:31:48"
                }
              ]
            },
            "functionSelector": "e110255b",
            "id": 11272,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 11254,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 11253,
                  "name": "onlyAdmin",
                  "nameLocations": [
                    "4721:9:48"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 10972,
                  "src": "4721:9:48"
                },
                "nodeType": "ModifierInvocation",
                "src": "4721:9:48"
              }
            ],
            "name": "removeClaimRegistryManager",
            "nameLocation": "4669:26:48",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 11252,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11251,
                  "mutability": "mutable",
                  "name": "_owner",
                  "nameLocation": "4704:6:48",
                  "nodeType": "VariableDeclaration",
                  "scope": 11272,
                  "src": "4696:14:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 11250,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4696:7:48",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4695:16:48"
            },
            "returnParameters": {
              "id": 11255,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4731:0:48"
            },
            "scope": 11393,
            "src": "4660:219:48",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 11285,
              "nodeType": "Block",
              "src": "5028:59:48",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 11282,
                        "name": "_owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11275,
                        "src": "5073:6:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 11280,
                        "name": "_issuersRegistryManager",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10951,
                        "src": "5045:23:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$11820_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 11281,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "5069:3:48",
                      "memberName": "has",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11900,
                      "src": "5045:27:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_Role_$11820_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_Role_$11820_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address) view returns (bool)"
                      }
                    },
                    "id": 11283,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5045:35:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 11279,
                  "id": 11284,
                  "nodeType": "Return",
                  "src": "5038:42:48"
                }
              ]
            },
            "documentation": {
              "id": 11273,
              "nodeType": "StructuredDocumentation",
              "src": "4885:61:48",
              "text": "@dev IssuersRegistryManager Role _issuersRegistryManager"
            },
            "functionSelector": "ff806311",
            "id": 11286,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isIssuersRegistryManager",
            "nameLocation": "4960:24:48",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 11276,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11275,
                  "mutability": "mutable",
                  "name": "_owner",
                  "nameLocation": "4993:6:48",
                  "nodeType": "VariableDeclaration",
                  "scope": 11286,
                  "src": "4985:14:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 11274,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4985:7:48",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4984:16:48"
            },
            "returnParameters": {
              "id": 11279,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11278,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 11286,
                  "src": "5022:4:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 11277,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "5022:4:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5021:6:48"
            },
            "scope": 11393,
            "src": "4951:136:48",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 11308,
              "nodeType": "Block",
              "src": "5163:147:48",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 11296,
                        "name": "_owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11288,
                        "src": "5201:6:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 11293,
                        "name": "_issuersRegistryManager",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10951,
                        "src": "5173:23:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$11820_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 11295,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "5197:3:48",
                      "memberName": "add",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11847,
                      "src": "5173:27:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$11820_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$11820_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address)"
                      }
                    },
                    "id": 11297,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5173:35:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 11298,
                  "nodeType": "ExpressionStatement",
                  "src": "5173:35:48"
                },
                {
                  "assignments": [
                    11300
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 11300,
                      "mutability": "mutable",
                      "name": "_role",
                      "nameLocation": "5232:5:48",
                      "nodeType": "VariableDeclaration",
                      "scope": 11308,
                      "src": "5218:19:48",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string"
                      },
                      "typeName": {
                        "id": 11299,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "5218:6:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage_ptr",
                          "typeString": "string"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 11302,
                  "initialValue": {
                    "hexValue": "4973737565727352656769737472794d616e61676572",
                    "id": 11301,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "5240:24:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_77093c1b34155b4195fe707082d738160fb764b2c3da96821f50059287ecb3d4",
                      "typeString": "literal_string \"IssuersRegistryManager\""
                    },
                    "value": "IssuersRegistryManager"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5218:46:48"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 11304,
                        "name": "_owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11288,
                        "src": "5289:6:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 11305,
                        "name": "_role",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11300,
                        "src": "5297:5:48",
                        "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": 11303,
                      "name": "RoleAdded",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10927,
                      "src": "5279:9:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (address,string memory)"
                      }
                    },
                    "id": 11306,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5279:24:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 11307,
                  "nodeType": "EmitStatement",
                  "src": "5274:29:48"
                }
              ]
            },
            "functionSelector": "ac95fc91",
            "id": 11309,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 11291,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 11290,
                  "name": "onlyAdmin",
                  "nameLocations": [
                    "5153:9:48"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 10972,
                  "src": "5153:9:48"
                },
                "nodeType": "ModifierInvocation",
                "src": "5153:9:48"
              }
            ],
            "name": "addIssuersRegistryManager",
            "nameLocation": "5102:25:48",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 11289,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11288,
                  "mutability": "mutable",
                  "name": "_owner",
                  "nameLocation": "5136:6:48",
                  "nodeType": "VariableDeclaration",
                  "scope": 11309,
                  "src": "5128:14:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 11287,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5128:7:48",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5127:16:48"
            },
            "returnParameters": {
              "id": 11292,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5163:0:48"
            },
            "scope": 11393,
            "src": "5093:217:48",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 11331,
              "nodeType": "Block",
              "src": "5389:152:48",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 11319,
                        "name": "_owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11311,
                        "src": "5430:6:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 11316,
                        "name": "_issuersRegistryManager",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10951,
                        "src": "5399:23:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$11820_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 11318,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "5423:6:48",
                      "memberName": "remove",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11873,
                      "src": "5399:30:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$11820_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$11820_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address)"
                      }
                    },
                    "id": 11320,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5399:38:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 11321,
                  "nodeType": "ExpressionStatement",
                  "src": "5399:38:48"
                },
                {
                  "assignments": [
                    11323
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 11323,
                      "mutability": "mutable",
                      "name": "_role",
                      "nameLocation": "5461:5:48",
                      "nodeType": "VariableDeclaration",
                      "scope": 11331,
                      "src": "5447:19:48",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string"
                      },
                      "typeName": {
                        "id": 11322,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "5447:6:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage_ptr",
                          "typeString": "string"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 11325,
                  "initialValue": {
                    "hexValue": "4973737565727352656769737472794d616e61676572",
                    "id": 11324,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "5469:24:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_77093c1b34155b4195fe707082d738160fb764b2c3da96821f50059287ecb3d4",
                      "typeString": "literal_string \"IssuersRegistryManager\""
                    },
                    "value": "IssuersRegistryManager"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5447:46:48"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 11327,
                        "name": "_owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11311,
                        "src": "5520:6:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 11328,
                        "name": "_role",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11323,
                        "src": "5528:5:48",
                        "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": 11326,
                      "name": "RoleRemoved",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10933,
                      "src": "5508:11:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (address,string memory)"
                      }
                    },
                    "id": 11329,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5508:26:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 11330,
                  "nodeType": "EmitStatement",
                  "src": "5503:31:48"
                }
              ]
            },
            "functionSelector": "6ff7bff7",
            "id": 11332,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 11314,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 11313,
                  "name": "onlyAdmin",
                  "nameLocations": [
                    "5379:9:48"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 10972,
                  "src": "5379:9:48"
                },
                "nodeType": "ModifierInvocation",
                "src": "5379:9:48"
              }
            ],
            "name": "removeIssuersRegistryManager",
            "nameLocation": "5325:28:48",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 11312,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11311,
                  "mutability": "mutable",
                  "name": "_owner",
                  "nameLocation": "5362:6:48",
                  "nodeType": "VariableDeclaration",
                  "scope": 11332,
                  "src": "5354:14:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 11310,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5354:7:48",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5353:16:48"
            },
            "returnParameters": {
              "id": 11315,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5389:0:48"
            },
            "scope": 11393,
            "src": "5316:225:48",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 11345,
              "nodeType": "Block",
              "src": "5672:53:48",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 11342,
                        "name": "_owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11335,
                        "src": "5711:6:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 11340,
                        "name": "_tokenInfoManager",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10954,
                        "src": "5689:17:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$11820_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 11341,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "5707:3:48",
                      "memberName": "has",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11900,
                      "src": "5689:21:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_Role_$11820_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_Role_$11820_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address) view returns (bool)"
                      }
                    },
                    "id": 11343,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5689:29:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 11339,
                  "id": 11344,
                  "nodeType": "Return",
                  "src": "5682:36:48"
                }
              ]
            },
            "documentation": {
              "id": 11333,
              "nodeType": "StructuredDocumentation",
              "src": "5547:49:48",
              "text": "@dev TokenInfoManager Role _tokenInfoManager"
            },
            "functionSelector": "2447e50b",
            "id": 11346,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isTokenInfoManager",
            "nameLocation": "5610:18:48",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 11336,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11335,
                  "mutability": "mutable",
                  "name": "_owner",
                  "nameLocation": "5637:6:48",
                  "nodeType": "VariableDeclaration",
                  "scope": 11346,
                  "src": "5629:14:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 11334,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5629:7:48",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5628:16:48"
            },
            "returnParameters": {
              "id": 11339,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11338,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 11346,
                  "src": "5666:4:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 11337,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "5666:4:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5665:6:48"
            },
            "scope": 11393,
            "src": "5601:124:48",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 11368,
              "nodeType": "Block",
              "src": "5795:135:48",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 11356,
                        "name": "_owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11348,
                        "src": "5827:6:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 11353,
                        "name": "_tokenInfoManager",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10954,
                        "src": "5805:17:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$11820_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 11355,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "5823:3:48",
                      "memberName": "add",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11847,
                      "src": "5805:21:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$11820_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$11820_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address)"
                      }
                    },
                    "id": 11357,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5805:29:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 11358,
                  "nodeType": "ExpressionStatement",
                  "src": "5805:29:48"
                },
                {
                  "assignments": [
                    11360
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 11360,
                      "mutability": "mutable",
                      "name": "_role",
                      "nameLocation": "5858:5:48",
                      "nodeType": "VariableDeclaration",
                      "scope": 11368,
                      "src": "5844:19:48",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string"
                      },
                      "typeName": {
                        "id": 11359,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "5844:6:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage_ptr",
                          "typeString": "string"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 11362,
                  "initialValue": {
                    "hexValue": "546f6b656e496e666f4d616e61676572",
                    "id": 11361,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "5866:18:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_df0fbeba9f692191bef132c5367fafb34e1a803f989261a1e0644aab540e8e9d",
                      "typeString": "literal_string \"TokenInfoManager\""
                    },
                    "value": "TokenInfoManager"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5844:40:48"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 11364,
                        "name": "_owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11348,
                        "src": "5909:6:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 11365,
                        "name": "_role",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11360,
                        "src": "5917:5:48",
                        "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": 11363,
                      "name": "RoleAdded",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10927,
                      "src": "5899:9:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (address,string memory)"
                      }
                    },
                    "id": 11366,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5899:24:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 11367,
                  "nodeType": "EmitStatement",
                  "src": "5894:29:48"
                }
              ]
            },
            "functionSelector": "94e69f1b",
            "id": 11369,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 11351,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 11350,
                  "name": "onlyAdmin",
                  "nameLocations": [
                    "5785:9:48"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 10972,
                  "src": "5785:9:48"
                },
                "nodeType": "ModifierInvocation",
                "src": "5785:9:48"
              }
            ],
            "name": "addTokenInfoManager",
            "nameLocation": "5740:19:48",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 11349,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11348,
                  "mutability": "mutable",
                  "name": "_owner",
                  "nameLocation": "5768:6:48",
                  "nodeType": "VariableDeclaration",
                  "scope": 11369,
                  "src": "5760:14:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 11347,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5760:7:48",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5759:16:48"
            },
            "returnParameters": {
              "id": 11352,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5795:0:48"
            },
            "scope": 11393,
            "src": "5731:199:48",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 11391,
              "nodeType": "Block",
              "src": "6003:140:48",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 11379,
                        "name": "_owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11371,
                        "src": "6038:6:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 11376,
                        "name": "_tokenInfoManager",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10954,
                        "src": "6013:17:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$11820_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 11378,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "6031:6:48",
                      "memberName": "remove",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11873,
                      "src": "6013:24:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$11820_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$11820_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address)"
                      }
                    },
                    "id": 11380,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6013:32:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 11381,
                  "nodeType": "ExpressionStatement",
                  "src": "6013:32:48"
                },
                {
                  "assignments": [
                    11383
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 11383,
                      "mutability": "mutable",
                      "name": "_role",
                      "nameLocation": "6069:5:48",
                      "nodeType": "VariableDeclaration",
                      "scope": 11391,
                      "src": "6055:19:48",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string"
                      },
                      "typeName": {
                        "id": 11382,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "6055:6:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage_ptr",
                          "typeString": "string"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 11385,
                  "initialValue": {
                    "hexValue": "546f6b656e496e666f4d616e61676572",
                    "id": 11384,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "6077:18:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_df0fbeba9f692191bef132c5367fafb34e1a803f989261a1e0644aab540e8e9d",
                      "typeString": "literal_string \"TokenInfoManager\""
                    },
                    "value": "TokenInfoManager"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6055:40:48"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 11387,
                        "name": "_owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11371,
                        "src": "6122:6:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 11388,
                        "name": "_role",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11383,
                        "src": "6130:5:48",
                        "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": 11386,
                      "name": "RoleRemoved",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10933,
                      "src": "6110:11:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (address,string memory)"
                      }
                    },
                    "id": 11389,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6110:26:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 11390,
                  "nodeType": "EmitStatement",
                  "src": "6105:31:48"
                }
              ]
            },
            "functionSelector": "882fc6ca",
            "id": 11392,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 11374,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 11373,
                  "name": "onlyAdmin",
                  "nameLocations": [
                    "5993:9:48"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 10972,
                  "src": "5993:9:48"
                },
                "nodeType": "ModifierInvocation",
                "src": "5993:9:48"
              }
            ],
            "name": "removeTokenInfoManager",
            "nameLocation": "5945:22:48",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 11372,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11371,
                  "mutability": "mutable",
                  "name": "_owner",
                  "nameLocation": "5976:6:48",
                  "nodeType": "VariableDeclaration",
                  "scope": 11392,
                  "src": "5968:14:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 11370,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5968:7:48",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5967:16:48"
            },
            "returnParameters": {
              "id": 11375,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6003:0:48"
            },
            "scope": 11393,
            "src": "5936:207:48",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          }
        ],
        "scope": 11394,
        "src": "1195:4950:48",
        "usedErrors": []
      }
    ],
    "src": "1093:5053:48"
  },
  "compiler": {
    "name": "solc",
    "version": "0.8.17+commit.8df45f5f.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.4.8",
  "updatedAt": "2022-12-08T12:51:01.403Z",
  "devdoc": {
    "kind": "dev",
    "methods": {
      "isClaimRegistryManager(address)": {
        "details": "ClaimRegistryManager Role _claimRegistryManager"
      },
      "isComplianceManager(address)": {
        "details": "ComplianceManager Role _complianceManager"
      },
      "isComplianceSetter(address)": {
        "details": "ComplianceSetter Role _complianceSetter"
      },
      "isIssuersRegistryManager(address)": {
        "details": "IssuersRegistryManager Role _issuersRegistryManager"
      },
      "isOwnerAdmin(address)": {
        "details": "OwnerAdmin Role _ownerAdmin"
      },
      "isRegistryAddressSetter(address)": {
        "details": "RegistryAddressSetter Role _registryAddressSetter"
      },
      "isTokenInfoManager(address)": {
        "details": "TokenInfoManager Role _tokenInfoManager"
      },
      "owner()": {
        "details": "Returns the address of the current owner."
      },
      "renounceOwnership()": {
        "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner."
      },
      "transferOwnership(address)": {
        "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."
      }
    },
    "version": 1
  },
  "userdoc": {
    "kind": "user",
    "methods": {},
    "version": 1
  }
}